![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Sequence Generator (a << b)Boost , Spirit 2.5.2 , Generator Operators
|
выражение |
Семантика |
---|---|
< |
Важно отметить, что последовательности не выполняют никакой буферизации вывода, генерируемого его элементами. Это означает, что любая неисправная последовательность может уже генерировать некоторый выход, которыйнеоткатился назад.
![]() | Tip |
---|---|
Самый простой способ заставить последовательность вести себя так, как если бы она буферизовала, - это завернуть ее в буферную директиву (см.< buffer[a << b << c] нене будет производить никакого вывода в случае неудачной последовательности. |
выражение |
атрибут |
---|---|
a <<
b (последовательность)
|
a: A, b: B --> (a << b): tuple<A, B> a: A, b: Unused --> (a << b): A a: Unused, b: B --> (a << b): B a: Unused, b: Unused --> (a << b): Unused a: A, b: A --> (a << b): vector<A> a: vector<A>, b: A --> (a << b): vector<A> a: A, b: vector<A> --> (a << b): vector<A> a: vector<A>, b: vector<A> --> (a << b): vector<A>
|
![]() | Important |
---|---|
В таблице выше используются< Нотация< < |
Правила композиции и распространения атрибутов, как показано в таблице выше, делают последовательности несколько особенными, поскольку они могут работать в двух режимах, если все элементы имеют один и тот же тип атрибутов: потребление последовательностей синтеза и потребление контейнеров STL. Выбранный режим зависит от типа поставляемого атрибута.
Общая сложность генератора последовательностей определяется суммой сложностей его элементов. Сложность самой последовательности — O(N), где N — число элементов в последовательности.
![]() | Note |
---|---|
Тестовый ремень для примера (примеров) ниже представлен в разделеОсновные примеры. |
Некоторые включают:
#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::double_;
Основное использование последовательности:
test_generator_attr("1.0,2.0", double_ << ',' << double_, std::make_pair(1.0, 2.0));
Статья Sequence Generator (a << b) раздела Spirit 2.5.2 Generator Operators может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: Generator Operators ::
реклама |