![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Stream Generators (stream, wstream, etc.)Boost , Spirit 2.5.2 , Stream Generators
|
Имя |
---|
boost::spirit::stream //
alias: boost::spirit::karma::stream |
boost::spirit::wstream //
alias: boost::spirit::karma::wstream |
template <typename Char> struct stream_generator;
Параметр |
Описание |
По умолчанию |
---|---|---|
| |
Notation
s
Переменный экземпляр любого типа с определенным соответствующим потоковым потоком оператор<;()
или Lazy Argument, который оценивает любой тип с определенным соответствующим потоковым потоком оператор<()
.
Семантика выражения определяется только там, где она отличается от или не определяется в PrimitiveGenerator
.
Выражение |
Описание |
---|---|
| Позвонить стриминг |
stream(s) | Позвонить стриминг |
| Позвонить стриминг |
wstream(s) |
Все генераторы, перечисленные в таблице выше, являются предопределенными специализациями stream_generator<Char>
основного типа генератора потока, описанного ниже. Можно непосредственно использовать этот тип для создания потоковых генераторов с использованием произвольного основного типа.
Выражение |
Семантика |
---|---|
stream_generator< Char >()
| Позвонить стриминг |
stream_generator< Char >()(s) stream_generator< Char >()(s) [ORIG_END] --> |
Все перечисленные выше потоковые генераторы требуют типа значения для генерации выходной информации (будь то непосредственное значение или связанный с ним атрибут) для реализации потокового оператора, соответствующего обычным I/O-конвенциям потоков (где ttribute_type
является типом значения для генерации выходной информации):
template <typename Ostream> Ostream& operator<< (Ostream& os, attribute_type const& attr) { // type specific output generation return os; }
Этот оператор будет называться потоковыми генераторами, чтобы собрать выход для атрибута типа attribute_type
. Все данные, передаваемые в данный Ostream
, в конечном итоге будут генерироваться соответствующим экземпляром генератора потока.
Выражение |
Attribute |
---|---|
| hold_any , атрибут
является обязательным (в противном случае компиляция потерпит неудачу)
|
stream(s) | unused |
| |
wstream(s) | unused |
| |
stream_generator<Char>()(s) | unused |
![]() | Important |
---|---|
Тип атрибута |
![]() | Note |
---|---|
В дополнение к их обычному атрибуту типа |
O(N), где N - число символов, испускаемых генератором потока
![]() | Note |
---|---|
Испытательный узел для примера (примеров) ниже представлен в разделе Basics examples. |
Некоторые из них включают:
#include <boost/spirit/include/karma.hpp> #include <boost/spirit/include/support_utree.hpp> #include <boost/spirit/include/phoenix_core.hpp> #include <boost/spirit/include/phoenix_operator.hpp> #include <boost/fusion/include/std_pair.hpp> #include <iostream> #include <string>
Некоторые используют заявления:
using boost::spirit::karma::stream;
И классовое определение, используемое в примерах:
// a simple complex number representation z = a + bi struct complex { complex (double a, double b) : a(a), b(b) {} double a; double b; };
// define streaming operator for the type complex std::ostream& operator<< (std::ostream& os, complex const& z) { os << "{" << z.a << "," << z.b << "}"; return os; }
Основное использование генераторов stream
:
test_generator_attr("abc", stream, "abc"); test_generator("abc", stream("abc")); test_generator_attr("{1.2,2.4}", stream, complex(1.2, 2.4)); test_generator("{1.2,2.4}", stream(complex(1.2, 2.4)));
Статья Stream Generators (stream, wstream, etc.) раздела Spirit 2.5.2 Stream Generators может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: Stream Generators ::
реклама |