|
Boost Users : |
From: Chris Ross (cross+boost_at_[hidden])
Date: 2008-06-20 15:16:02
I'm having some problems getting boost::lexical_cast to work for me.
I have an abstract class, and it calls a pure virtual function which
returns a boost::any. I don't know the type of the boost::any, but in
the place I'm working now, I pretty much can assume it's boolean, but it
could be a 'bool' data type, or an 'int', or a 'short', or any other
thing depending on how the boost::any that the method returned to me was
constructed.
When I try to use boost::lexical_cast<int>(anyvar), I get compile
errors as:
/usr/local/boost/include/boost/lexical_cast.hpp: In member function
âbool boost::detail::lexical_stream<Target, Source,
Traits>::operator<<(const Source&) [with Target = int, Source =
boost::any, Traits = std::char_traits<char>]â:
/usr/local/boost/include/boost/lexical_cast.hpp:1146: instantiated
from âTarget boost::detail::lexical_cast(typename
boost::call_traits<Source>::param_type, CharT*, size_t) [with Target =
int, Source = boost::any, bool Unlimited = true, CharT =
boost::lexical_cast::char_type]â
/usr/local/boost/include/boost/lexical_cast.hpp:1170: instantiated
from âTarget boost::lexical_cast(const Source&) [with Target = int,
Source = boost::any]â
../db.cc:51: instantiated from here
/usr/local/boost/include/boost/lexical_cast.hpp:588: error: no match for
âoperator<<â in â((boost::detail::lexical_stream<int, boost::any,
std::char_traits<char> >*)this)->boost::detail::lexical_stream<int,
boost::any, std::char_traits<char> >::stream << inputâ
/usr/lib/gcc/x86_64-redhat-linux/4.3.0/../../../../include/c
++/4.3.0/ostream:112: note: candidates are: std::basic_ostream<_CharT,
_Traits>& std::basic_ostream<_CharT,
_Traits>::operator<<(std::basic_ostream<_CharT, _Traits>&
(*)(std::basic_ostream<_CharT, _Traits>&)) [with _CharT = char, _Traits
= std::char_traits<char>]
(and more "candidates are" output lines)
Line 51 of db.cc is:
int v = boost::lexical_cast<int>(is);
I know in this case that the subclass is returning a
boost::any<int64_t>. And, if I use boost::any_cast<int_64t>(is), I get
the right value out. But, if I use boost::any_cast<int>(is) it throws a
bad_any_cast, so I assume I need lexical_cast, or something like that,
in here since I don't know the source type.
Can anyone else figure out why the above compile fails?
- Chris
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net