Программирование. Принципы и практика использования C++ Исправленное издание, стр. 318
to_string()from_string()stringstream<<>>struct bad_lexical_cast:std::bad_cast{ const char* what() const { return "bad cast"; }};template<typename Target,typename Source>Target lexical_cast(Source arg){ std::stringstream interpreter; Target result; if (!(interpreter << arg) // записываем arg в поток || !(interpreter >> result) // считываем result из потока || !(interpreter >> std::ws).eof()) // поток пуст? throw bad_lexical_cast(); return result;}Довольно забавно и остроумно, что инструкция
!(interpreter>>std::ws).eof()stringstreamintstringlexical_castlexical_cast<int>("123")lexical_cast<int>("123")lexical_cast<int>("123.5")Довольно элегантное, хотя и странное, имя
lexical_castboost23.3. Потоки ввода-вывода
iostream
Стандартные потоки организованы в виде иерархии классов (см. раздел 14.3).

В совокупности эти классы дают нам возможность выполнять ввод-вывод, используя файлы и строки (а также все, что выглядит как файлы и строки, например клавиатуру и экран; см. главу 10). Как указано в главах 10-11, потоки
iostreamstringstreamiostreamistreamostream
23.4. Ассоциативные контейнеры
mapРассмотрим сообщение электронной почты. Мы часто ищем и анализируем сообщения электронной почты и ее регистрационные записи с помощью какой-то программы (например, Thunderbird или Outlook). Чаще всего эти программы скрывают детали, характеризующие источник сообщения, но вся информация о том, кто его послал, кто получил, через какие узлы оно прошло, и многое другое поступает в программы в виде текста, содержащегося в заголовке письма. Так выглядит полное сообщение. Существуют тысячи инструментов для анализа заголовков. Большинство из них использует регулярные выражения (как описано в разделе 23.5–23.9) для извлечения информации и какие-то разновидности ассоциативных массивов для связывания их с соответствующими сообщениями. Например, мы часто ищем сообщение электронной почты для выделения писем, поступающих от одного и того же отправителя, имеющих одну и ту же тему или содержащих информацию по конкретной теме.
Приведем упрощенный файл электронной почты для демонстрации некоторых методов извлечения данных из текстовых файлов. Заголовки представляют собой реальные заголовки RFC2822 с веб-страницы www.faqs.org/rfcs/rfc2822.html. Рассмотрим пример.
xxx
xxx
––––
From: John Doe < [email protected]>
To: Mary Smith < [email protected]>
Subject: Saying Hello
Date: Fri, 21 Nov 1997 09:55:06 –0600
Message–ID: < [email protected]>
This is a message just to say hello.
So, "Hello".
––––
From: Joe Q. Public < [email protected]>