|
Boost : |
From: scleary_at_[hidden]
Date: 2001-10-17 14:42:47
> Yes steve, i understood that.
>
> What is not clear to me is that an exception is
> thrown. I would have expected the convertion, the
> actual cast from any, containing 5, to const char *)
> to work.
>
> To me, the resulting string s should contain "5" but
> instead the exception is thown.
Oh. Sorry, I misunderstood your question.
Take a look at the beginning of the "any" docs at Kevlin's three points
under "Motivation". "any" preserves type differences (i.e., does *not*
provide automatic conversions). Conversions like what you want are supplied
by boost::lexical_cast.
There doesn't exist a class taking advantage of lexical_cast like you want
(right now, anyway -- maybe you could submit one?). Here's a simple
prototype for one: (warning: untested code :)
class variant
{
private:
std::string data;
public:
template <typename T>
variant(const T & other)
:data(boost::lexical_cast<std::string>(other)) { }
template <typename T>
variant & operator=(const T & other)
{
data = boost::lexical_cast<std::string>(other);
return *this;
}
// Possibly add "operator T()" ???
template <typename T>
T as()
{ return boost::lexical_cast<T>(data); }
};
variant any_value;
any_value = 5;
std::string s = any_value.as<std::string>();
-Steve
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk