...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
Boost.Convert builds on the boost::lexical_cast
experience and takes those type conversion/transformation-related ideas further
Boost.Convert provides new and familiar conversion/transformation-related functionality such as:
Boost.Convert consists of two components:
boost::convert()
interface;
The boost::convert()
interface
The collection of pluggable converters is independent of the boost::convert()
API facade and is designed to be extendible
and extended over time. Currently the following converters are provided:
boost::lexical_cast
-based,
printf/scanf
-based,
strtol
-inspired,
std::stringstream
-based,
boost::spirit
-based.
The converters provide new and familiar functionality and demonstrate how existing
and independent conversion facilities might be incorporated in to the Boost.Convert
framework. For example, the std::stream
-based
converter draws on the standard std::streams
functionality and provides:
std::ios
-based
precision, base, upper/lower-case, scientific, etc.);
locale
s;
char
and wchar_t
support.
The following code demonstrates conversion of an array of integers from their textual hexadecimal representation. It assigns -1 to those which fail to convert:
std::array<char const*, 3> strs = {{ " 5", "0XF", "not an int" }}; std::vector<int> ints; boost::cnv::cstream cnv; // Configure converter to read hexadecimal, skip (leading) white spaces. cnv(std::hex)(std::skipws); std::transform(strs.begin(), strs.end(), std::back_inserter(ints), boost::cnv::apply<int>(std::cref(cnv)).value_or(-1)); BOOST_TEST(ints.size() == 3); // Number of values processed. BOOST_TEST(ints[0] == 5); // " 5" BOOST_TEST(ints[1] == 15); // "0XF" BOOST_TEST(ints[2] == -1); // "not an int"