Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

Converters in Detail
PrevUpHomeNext

The purpose of the converter is to

  • Make use of the boost::lexical_cast functionality and performance that many people have become accustomed to and comfortable with;
  • Demonstrate how existing independent conversion/transformation-related facilities might be incorporated in to the Boost.Convert framework.

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.


PrevUpHomeNext