![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Boost "quoted" I/O manipulatorBoost , ,
|
"Quoted" Манипуляторы ввода/вывода для струн еще не приняты в Boost в качестве общедоступных компонентов. Таким образом, файл заголовка в настоящее время находится в |
C++ Стандартный библиотечный поток ввода/вывода для строк, содержащих встроенные пространства, может привести к неожиданным результатам. Например,
std::stringstream ss; std::string original = "fooled you"; std::string round_trip; ss << original; ss >> round_trip; std::cout << original; // outputs: fooled you std::cout << round_trip; // outputs: fooled assert(original == round_trip); // assert will fire
Манипулятор ввода/вывода потока Boost<quoted
>размещает разграничители, по умолчанию на двойную цитату (<"
>), вокруг строк на выходе и снимает разграничители на входе. Это обеспечивает струны со встроенными пространствами туда и обратно по желанию. Например,
std::stringstream ss; std::string original = "fooled you"; std::string round_trip; ss << quoted(original); ss >> quoted(round_trip); std::cout << quoted(original); // outputs: "fooled you" std::cout << round_trip; // outputs: fooled you assert(original == round_trip); // assert will not fire
Если строка содержит характер делимитера, на выходе этому персонажу будет предшествовать персонаж побега, как и самому персонажу побега:
std::cout << quoted("'Jack & Jill'", '&', '\''); // outputs: '&'Jack && Jill&''
namespace boost { namespace io { // manipulator for const std::basic_string& template <class Char, class Traits, class Alloc> unspecified-type1 quoted(const std::basic_string<Char, Traits, Alloc>& string, Char escape='\\', Char delim='\"'); // manipulator for const C-string* template <class Char> unspecified-type2 quoted(const Char* string, Char escape='\\', Char delim='\"'); // manipulator for non-const std::basic_string& template <class Char, class Traits, class Alloc> unspecified-type3 quoted(std::basic_string<Char, Traits, Alloc>& string, Char escape='\\', Char delim='\"'); } }
<unspecified_type1
>,<unspecified_type2
>и<unspecified_type3
>представляют собой поставляемые типы реализации с поставляемой реализацией.<operator<<
>:
template <class Char, class Traits> std::basic_ostream<Char, Traits>& operator<<(std::basic_ostream<Char, Traits>& os, constunspecified_typeN
& proxy);Эффекты:Вставить символы в<
os
>:
delim
.- Каждый персонаж в
string
.escape
илиdelim
, как определеноoperator==
, первый выходescape
.delim
.Замечания:<
string
>,<escape
>и<delim
>имеют тип и значение соответствующих аргументов призыва к<quoted
>функции, которая построена<proxy
>.Возвращение:<
os
>.
<unspecified_type3
>представляет собой поставляемый тип реализации с поставляемой реализацией<operator>>
>:
template <class Char, class Traits> std::basic_istream<Char, Traits>& operator>>(std::basic_istream<Char, Traits>& is, constunspecified_type3
& proxy);Эффекты:Выдержки из<
os
>:
- Если же первый из них равен делиму, как определено
operator==
, то:
- Выключите
skipws
флаг.string.clear()
- До тех пор, пока не достигнут неизбежный
delim
символ илиis.not_good()
, извлеките символы изos
и приложите их кstring
, за исключением того, что, если достигнутescape
, проигнорируйте его и приложите следующий символ кstring
.- Откажитесь от финального персонажа
delim
.- Восстановите флаг
skipws
до его первоначального значения.- В противном случае
os >> string
.Замечания:<
string
>,<escape
>и<delim
>имеют тип и значение соответствующих аргументов призыва к<quoted
>функции, которая построена<proxy
>.Возвращение:<
is
>.
Потоковый манипулятор<quoted()
>возник из обсуждений списка рассылки разработчиков Boost. Среди участников были Беман Доуз, Роб Стюарт, Александр Ламейсон, Эрик Ниблер, Висенте Ботет, Андрей Семашев, Фил Ричардс и Роб Мюррей. Предложения Эрика Ниблера послужили основой для названия и формы шаблонов.
© Авторское право Beman Dawes, 2002, 2006, 2007, 2009, 2010
Распространяется в соответствии с Лицензией на программное обеспечение Boost, версия 1.0. См.www.boost.org/LICENSE_1_0.txt
Пересмотрено20 июня 201020 June 2010[ORIG_END] -->
Статья Boost "quoted" I/O manipulator раздела может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: ::
реклама |