Целью конвертера является
- Используйте функциональность и производительность<
boost::lexical_cast
>, к которым многие люди привыкли и которым комфортно; - Продемонстрировать, каким образом существующие независимые средства преобразования/трансформации могут быть включены вBoost.ConvertОсновы.
Преобразователь может легко заменить<boost::lexical_cast
>, добавляя гибкость и удобство:
#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 : public boost::cnv::lexical_cast {};
int i1 = lexical_cast<int>("123");
int i2 = convert<int>("123").value();
int i3 = convert<int>("uhm").value_or(-1);
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");
Смотрите<boost::cnv::lexical_cast implementation
>подробностей.
Для того, чтобы определенный пользователем тип был интегрирован в структуру<boost::lexical_cast
>и, следовательно, развернут с преобразователем<boost::cnv::lexical_cast
>:
Первые два требования предъявляются к конструкции и реализации<boost::lexical_cast
>, а последние два требования к базовому<std::stringstream
>двигателю.