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
This is an older version of Boost and was released in 2019. The current version is 1.90.0.
An interesting (and yet to be fully explored) property of the described design
is that Boost.Convert is not limited to string-to-type
and type-to-string conversions. The boost::convert() interface is type-agnostic and the plugged-in
converter ultimately dictates what type transformations are available. Consequently,
a wide range of conversion/transformation-related tasks can be addressed and
deployed uniformly by plugging-in special-purpose converters.
As an experiment, the code below (taken from test/encryption.cpp) does not do type conversion. Instead, it applies a string transformation:
string encrypted = boost::convert<string>("ABC", my_cypher).value(); string decrypted = boost::convert<string>(encrypted, my_cypher).value(); BOOST_ASSERT(encrypted == "123"); BOOST_ASSERT(decrypted == "ABC");
The original "ABC" string is "encrypted" as "123" first and then "123" is "decrypted" back to its original "ABC" form.
Similarly, I personally do not immediately see as objectionable string-transformations like:
std::u8string utf8 = boost::convert<std::u8string>(utf32_str, cnv); std::u8string utf8 = boost::convert<std::u8string>(mbcs_str, cnv);