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

PrevUpHomeNext

Converters in Detail

boost::cnv::lexical_cast Converter
boost::cnv::stream Converter
Formatting Support
Numeric Base
Field Width, Fill Character and Adjustment
Leading Whitespace Characters
Format of Boolean Values
Locale Support
Supported String Types
Wide String
Custom String Types
The Default Constructible Type Requirement
boost::cnv::strtol Converter
Basic Deployment
Formatting Support
Numeric Base (bin, oct, dec, hex)
Field Width, Fill Character and Adjustment
Leading Whitespace Characters
Floating-Point Precision
Supported String Types
Wide String
Custom String Types

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