The purpose of the converter is to
boost::lexical_cast
functionality and performance that many people have become accustomed
to and comfortable with;
The converter can easily replace boost::lexical_cast
,
adding flexibility and convenience:
#include <boost/convert.hpp> #include <boost/convert/lexical_cast.hpp> #include <boost/detail/lightweight_test.hpp> using std::string; using boost::convert; using boost::lexical_cast; struct boost::cnv::by_default : boost::cnv::lexical_cast {};
int i1 = lexical_cast<int>("123"); // Throws if the conversion fails. int i2 = convert<int>("123").value(); // Throws if the conversion fails. int i3 = convert<int>("uhm").value_or(-1); // Returns -1 if the conversion fails. string s1 = lexical_cast<string>(123); string s2 = convert<string>(123).value(); BOOST_TEST(i1 == 123); BOOST_TEST(i2 == 123); BOOST_TEST(i3 == -1); BOOST_TEST(s1 == "123"); BOOST_TEST(s2 == "123");
See the boost::cnv::lexical_cast implementation
for details.
In order for a user-defined type to be integrated into the boost::lexical_cast
framework and, consequently,
deployed with the boost::cnv::lexical_cast
converter:
The first two requirements are imposed by the boost::lexical_cast
design and implementation and the last two requirements by the underlying
std::stringstream
engine.