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

Plus Generator (+a)

Boost , Spirit 2.5.2 , Generator Operators

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

Генератор Plus используется для повторения выполнения встроенного генератора один или несколько раз. Успешно, если встроенный генератор был успешно выполнен хотя бы один раз.

Header
// forwards to <boost/spirit/home/karma/operator/plus.hpp>
#include <boost/spirit/include/karma_plus.hpp>

См. такжеВключить структуру.

Model of
Expression Semantics

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

выражение

Семантика

+a

Генераторaвыполняется один или более раз в зависимости от наличия атрибута. Исполнениеaпрекращается после того, как значения атрибутов, переданные генератору плюса, исчерпаны. Генератор плюс успешно работает до тех пор, пока его встроенный генератор был успешно выполнен по крайней мере один раз (если только основной выходной поток не сообщает об ошибке).

[Note]Note

Все неисправные итерации встроенного генератора будут потреблять один элемент из поставляемого атрибута. Общий+будет успешным до тех пор, пока по крайней мере один вызов встроенного генератора будет успешным (если основной выходной поток не сообщает об ошибке).

Attributes

См.Составные обозначения атрибутов.

выражение

атрибут

+a[единственный+

a: A --> +a: vector<A>
a: Unused --> +a: Unused

[Important]Important

В приведенной выше таблице используетсявектор<A>только в качестве заполнителя. Нотация вектора<A>означаетлюбой контейнер STL, содержащий элементы типаA.

Генератор Plus будет выполнять свой встроенный генератор один раз для каждого элемента в атрибуте предоставленного контейнера, пока встроенный генератор преуспевает. На каждой итерации он будет передавать следующий последовательный элемент из атрибута контейнера встроенному генератору. Поэтому количество итераций не будет больше количества элементов в контейнере, переданных в качестве его атрибута. Пустой контейнер приведет к отказу генератора плюс.

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

[Tip]Tip

Самый простой способ заставить генератор плюс вести себя так, как если бы он делал буферизацию, - это завернуть его в буферную директиву (см.буфер):

buffer[+a]

негенерируют какой-либо выход в случае выхода из строя генератора+a. Выражение:

+(buffer[a])

Он не будет генерировать какой-либо частичный выход из генератора, если он не генерирует в середине своего выхода. Общее выражение будет по-прежнему генерировать выход, произведенный всеми успешными вызовами генератораa.

Complexity

Общая сложность генератора плюс определяется сложностью его встроенного генератора, умноженной на количество выполненных итераций. Сложность самого генератора плюса — O(N), где N — количество элементов в контейнере, пропущенных в качестве его атрибута.

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

Базовое использование генератора плюс:

std::vector<double> v1;
v1.push_back(1.0);
v1.push_back(2.0);
v1.push_back(3.0);
test_generator_attr_delim("1.0 2.0 3.0 ", +double_, space, v1);

Более сложный вариант использования, показывающий, как использовать тот факт, что плюс выходит из строя для пустых контейнеров, переданных в качестве его атрибута:

std::vector<double> v2;               // empty container
test_generator_attr("empty", +double_ | "empty", v2);


PrevUpHomeNext

Статья Plus Generator (+a) раздела Spirit 2.5.2 Generator Operators может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: Generator Operators ::


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-20 09:07:00/0.0067191123962402/0