![]() |
![]() ![]() ![]() ![]() |
![]() |
Repetition Generator Directive (repeat[])Boost , Spirit 2.5.2 , Generator Directives
|
|||||||||||||||||||||||||||||||||||||||||
|
Имя |
|---|
< |
< |
Notation
Семантика выражения определяется только там, где она отличается от или не определена в<UnaryGenerator>.
|
выражение |
Семантика |
|---|---|
< | Повторить генератор< |
< | Повторите генератор< |
< | Повторите генератор< |
< | Повторите генератор< |
![]() | Note |
|---|---|
Все неисправные итерации встроенного генератора будут потреблять один элемент из поставляемого атрибута. Общий< |
См.Составные обозначения атрибутов.
|
выражение |
атрибут |
|---|---|
< | <a:A-->repeat[a]:vector<A> a:Unused-->repeat[a]:Unused> |
< |
a: A --> repeat(num)[a]: vector<A> a: Unused --> repeat(num)[a]: Unused
|
< |
a: A --> repeat(num1, num2)[a]: vector<A> a: Unused --> repeat(num1, num2)[a]: Unused
|
< |
a: A --> repeat(num, inf)[a]: vector<A> a: Unused --> repeat(num, inf)[a]: Unused
|
![]() | Important |
|---|---|
В таблице выше используется< < |
Важно отметить, что директива<repeat[]>не выполняет буферизации вывода, генерируемого встроенными элементами. Это означает, что любой неисправный генератор элементов может уже генерировать некоторый выход, которыйнеоткатился назад.
![]() | Tip |
|---|---|
Самый простой способ заставить директиву< buffer[repeat[a]] негенерирует выход в случае выхода из строя генератора< repeat[buffer[a]] Он не будет генерировать частичный выход из генератора< |
Общая сложность генератора повторения определяется сложностью его встроенного генератора. Сложность самого повтора - 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_; using boost::spirit::karma::repeat;
Основное использование директивы генератора<repeat>:
std::vector<double> v; v.push_back(1.0); v.push_back(2.0); v.push_back(3.0); test_generator_attr("[1.0][2.0][3.0]", repeat['[' << double_ << ']'], v); test_generator_attr("[1.0][2.0]", repeat(2)['[' << double_ << ']'], v); // fails because of insufficient number of items test_generator_attr("", repeat(4)['[' << double_ << ']'], v);
Статья Repetition Generator Directive (repeat[]) раздела Spirit 2.5.2 Generator Directives может быть полезна для разработчиков на c++ и boost.
:: Главная :: Generator Directives ::
реклама |