Интересным (и еще не полностью изученным) свойством описанного дизайна является то, чтоBoost.Convertне ограничивается конверсиями строка-тип и тип-струна. Интерфейс<boost::convert()
>является типо-агностическим, и подключаемый преобразователь в конечном итоге определяет, какие типы преобразований доступны. Следовательно, можно решать широкий спектр задач, связанных с преобразованием и преобразованием, иразвертывать равномернос помощью подключаемых преобразователей специального назначения.
В качестве эксперимента приведенный ниже код (взятый изtest/encryption.cpp) не делает преобразования типа. Вместо этого применяется струнное преобразование:
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");
Оригинальная строка «ABC» сначала «зашифрована», а затем «123» «расшифрована» обратно в исходную форму «ABC».
Точно так же я лично не сразу вижу нежелательные струнные преобразования, такие как:
std::u8string utf8 = boost::convert<std::u8string>(utf32_str, cnv);
std::u8string utf8 = boost::convert<std::u8string>(mbcs_str, cnv);