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