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

Stream Generators (stream, wstream, etc.)

Boost , Spirit 2.5.2 , Stream Generators

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

PrevUpHomeNext
Description

stream_generator приведет к использованию стандартного стримингового оператора для своего типа A, например:

std::ostream& operator<< (std::ostream&, A const&);
Header
// forwards to <boost/spirit/home/karma/stream.hpp>
#include <boost/spirit/include/karma_stream.hpp>

Также см. Include Structure.

Namespace

Имя

boost::spirit::stream // alias: boost::spirit::karma::stream

boost::spirit::wstream // alias: boost::spirit::karma::wstream

Synopsis
template <typename Char>
struct stream_generator;
Template parameters

Параметр

Описание

По умолчанию

Char

char

Model of

Notation

s

Переменный экземпляр любого типа с определенным соответствующим потоковым потоком оператор<;() или Lazy Argument, который оценивает любой тип с определенным соответствующим потоковым потоком оператор<().

Expression Semantics

Семантика выражения определяется только там, где она отличается от или не определяется в PrimitiveGenerator.

Выражение

Описание

поток

Позвонить стриминг оператор<<() для типа обязательного атрибута. Выход, испускаемый этим оператором, будет результатом генератора stream. Этот генератор никогда не терпит неудачу (если основной поток вывода не сообщает об ошибке). Тип персонажа I/O ostream считается char

stream(s)

Позвонить стриминг оператор<<() для типа непосредственного значения s. Выход, испускаемый этим оператором, будет результатом генератора stream. Этот генератор никогда не терпит неудачу (если основной поток вывода не сообщает об ошибке). Тип персонажа I/O ostream считается char.

wstream

Позвонить стриминг оператор<<() для типа обязательного атрибута. Выход, испускаемый этим оператором, будет результатом генератора stream. Этот генератор никогда не терпит неудачу (если основной поток вывода не сообщает об ошибке). Тип персонажа I/O ostream считается wchar_t

wstream(s)

Все генераторы, перечисленные в таблице выше, являются предопределенными специализациями stream_generator<Char> основного типа генератора потока, описанного ниже. Можно непосредственно использовать этот тип для создания потоковых генераторов с использованием произвольного основного типа.

Выражение

Семантика

stream_generator<
    Char
>()

Позвонить стриминг оператор<<() для типа обязательного атрибута. Выход, испускаемый этим оператором, будет результатом генератора stream. Этот генератор никогда не терпит неудачу (если основной поток вывода не сообщает об ошибке). Тип персонажа I/O ostream считается Char

stream_generator<
    Char
>()(s)

stream_generator<
    Char
>()(s)

[ORIG_END] -->
Additional Requirements

Все перечисленные выше потоковые генераторы требуют типа значения для генерации выходной информации (будь то непосредственное значение или связанный с ним атрибут) для реализации потокового оператора, соответствующего обычным I/O-конвенциям потоков (где ttribute_type является типом значения для генерации выходной информации):

template <typename Ostream>
Ostream& operator<< (Ostream& os, attribute_type const& attr)
{
    // type specific output generation
    return os;
}

Этот оператор будет называться потоковыми генераторами, чтобы собрать выход для атрибута типа attribute_type. Все данные, передаваемые в данный Ostream, в конечном итоге будут генерироваться соответствующим экземпляром генератора потока.

Attributes

Выражение

Attribute

поток

hold_any, атрибут является обязательным (в противном случае компиляция потерпит неудачу)

stream(s)

unused

wstream

whold_any, атрибут является обязательным (в противном случае сборник потерпит неудачу)

wstream(s)

unused

stream_generator<Char>()

basic_hold_any<Char>, атрибут является обязательным (в противном случае сборник потерпит неудачу)

stream_generator<Char>()(s)

unused

[Important]Important

Тип атрибута hold_any, подверженный воздействию некоторых потоковых генераторов семантически и синтаксически эквивалентен типу, реализованному Boost.Any. Он был добавлен к Spirit, поскольку он имеет лучшую производительность и меньший след по сравнению с Boost.Any.

[Note]Note

В дополнение к их обычному атрибуту типа Attrib все перечисленные генераторы принимают экземпляр boost:: Опционально<Attrib> Если boost::факультативно< инициализируется (оставляет значение) генераторы ведут себя так, как будто их атрибут был экземпляром Attrib и испускают значение, хранящееся в boost::факультативно<>. Иначе генераторы потерпят неудачу.

Complexity

O(N), где N - число символов, испускаемых генератором потока

Example
[Note]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)));


PrevUpHomeNext

Статья Stream Generators (stream, wstream, etc.) раздела Spirit 2.5.2 Stream Generators может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: Stream Generators ::


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-20 03:27:53/0.0085949897766113/1