Boost.Convertосновывается на опыте<boost::lexical_cast
>и развивает идеи, связанные с преобразованием.
- быть применимым к более широкому спектру сценариев развертывания, связанных с конверсией;
- обеспечить более гибкую, настраиваемую и расширяемую структуру преобразования типа;
- обеспечение общего последовательного поведения,
- Унифицировать и равномерно развернутьРазличные средства преобразованиячерез единый интерфейс.
Boost.Convertобеспечивает новые и знакомые функции, связанные с конверсией/трансформацией, такие как:
- (b) означает развертывание типов, которые не отвечают требованиямКонструктивность по умолчанию;
- четыре типа обнаружения конверсии-неудачи:
- в составе одного и того же технологического потока — основной и общий;
- как разветвленный технологический поток — основанный на исключениях и основанный на функциях;
- выбор немедленной или отсроченной обработки методом выбрасывания исключений и отказа от выбраковки;
- гибкость конверсионного провалаобработкачерез:
- исключение;
- возвращаемое значение;
- функция под названием Fallback;
- Поддержка стандартных алгоритмов.
Boost.Convertсостоит из двух компонентов:
- Интерфейс<
boost::convert()
>; - Расширяемая коллекция подключаемых преобразователей.
Интерфейс<boost::convert()
>
- (a) рекламирует, обеспечивает и обеспечивает определенноепоследовательное поведение;
- Унифицирует и обеспечиваетодин последовательный интерфейсдля различных средств преобразования.
Коллекция подключаемых преобразователей не зависит от фасада<boost::convert()
>API и рассчитана нарасширяемостьи длительность с течением времени. В настоящее время предусмотрены следующие преобразователи:
- <
boost::lexical_cast
>Основанный, - <
printf/scanf
>Основанный, - <
strtol
>Вдохновленный, - <
std::stringstream
>Основанный, - <
boost::spirit
>Основано.
Преобразователи обеспечивают новую и знакомую функциональность и демонстрируют, как существующие и независимые средства преобразования могут быть включены в.Boost.Convertframework. Например, преобразователь на основе<std::stream
>использует стандартную функциональность<std::streams
>и обеспечивает:
- конверсии типа строки и типа строки;
- поддержка форматирования (<
std::ios
>- на основе точности, базы, верхнего/нижнего регистра, научного и т.д.); - поддержка различных<
locale
>; - <
char
>и<wchar_t
>поддержки.
Следующий код демонстрирует преобразование массива целых чисел из их текстовогошестнадцатеричногопредставления. Он присваивает -1 тем, кто не конвертирует:
boost::array<char const*, 3> strs = {{ " 5", "0XF", "not an int" }};
std::vector<int> ints;
boost::cnv::cstream cnv;
cnv(std::hex)(std::skipws);
std::transform(strs.begin(), strs.end(), std::back_inserter(ints),
boost::cnv::apply<int>(boost::cref(cnv)).value_or(-1));
BOOST_TEST(ints.size() == 3);
BOOST_TEST(ints[0] == 5);
BOOST_TEST(ints[1] == 15);
BOOST_TEST(ints[2] == -1);