Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Boost "quoted" I/O manipulator

Boost , ,

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

"Quoted" I/O Manipulators
for Strings

"Quoted" Манипуляторы ввода/вывода для струн еще не приняты в Boost в качестве общедоступных компонентов. Таким образом, файл заголовка в настоящее время находится в

Introduction

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&''

Header <boost/io/quoted_manip.hpp> synopsis

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, const unspecified_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, const unspecified_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>.

Acknowledgements

Потоковый манипулятор<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.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-07-05 23:55:59/0.0068550109863281/0