<boost::cnv::stream
>принимает пользовательские строки и струнные типы в качестве ввода или вывода, если они удовлетворяют определенным требованиям.
boost::cnv::cstream cnv;
my_string my_str("123");
cnv(std::setprecision(2))(std::fixed);
BOOST_TEST(convert<int>(my_str, cnv).value_or(0) == 123);
BOOST_TEST(convert<my_string>( 99.999, cnv).value_or("bad") == "100.00");
BOOST_TEST(convert<my_string>( 99.949, cnv).value_or("bad") == "99.95");
BOOST_TEST(convert<my_string>(-99.949, cnv).value_or("bad") == "-99.95");
Если источником является струнный тип, то он должен представлять собойнепрерывную последовательностьсоответствующего типа символов (<char
>или<wchar_t
>), доступную через<begin()
>и<end()
>.
<std::stringstream
>реализован полностью в терминах<std::basic_streambuf
>, который, в свою очередь, работает насмежных последовательностях символов, также называемых буфером(см.<std::basic_streambuf
>для деталей). По соображениям эффективности<boost::cnv::stream
>использует предоставленную (только для чтения) входную строку в качестве буфераи, следовательно, требует, чтобы предоставленная входная строка была последовательной последовательностью символов.
Когда струна является целью, то описаннаянепрерывная последовательность символовне применяется. Любой тип, который обеспечивает
MyType::MyType(char const* beg, char const* end)
Конструктор может быть развернут в преобразованиях типа в строку.
Большая картинаглава для обсуждения потенциальных преимуществ развертывания пользовательских строк.