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

Alternative Generator (a | b)

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

Альтернативы генераторов используются для объединения различных, более примитивных генераторов в альтернативы. Все генераторы в альтернативе вызываются слева направо, пока один из них не преуспеет.

Header
// forwards to <boost/spirit/home/karma/operator/alternative.hpp>
#include <boost/spirit/include/karma_alternative.hpp>

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

Model of
Expression Semantics

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

выражение

Семантика

<a| b>

Генераторы<a>и<b>выполняются последовательно слева направо, пока один из них не преуспеет. Неудачный генератор заставляет альтернативный генератор попробовать следующий. Альтернатива терпит неудачу в целом, только если все элементы альтернативы терпят неудачу. Каждый элемент альтернативы проходит весь атрибут альтернативы.

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

Attributes

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

выражение

атрибут

<a| b>(альтернативный)

a: A, b: B --> (a | b): variant<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): A

[Important]Important

Таблица выше использует<variant<A,B>>только в качестве заполнителя.<variant<A,B>>обозначает тип<boost::variant<A,B>>.

Обработка атрибутов Альтернатив является особенной, поскольку их поведение не полностью определяется во время компиляции. Прежде всего, выбранный альтернативный элемент зависит от фактического типа атрибута, подаваемого альтернативному генератору (т.е. от того, что хранится в варианте). Тип атрибута, поставляемый ввремя выполнения, сужает набор рассматриваемых альтернатив тем, которые являются совместимыми атрибутами. Остальные варианты испробованы последовательно, пока первый из них не увенчается успехом. Ниже приведен пример такого поведения.

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::ascii::string;

Базовое использование альтернативы. Будучи только второй альтернативой, генератор<double_>выбирается для форматирования выходного сигнала, поскольку поставляемый тип атрибута не совместим (т.е. не конвертируем) с типом атрибута<string>.

boost::variant<std::string, double> v1(1.0);
test_generator_attr("1.0", string | double_, v1);
test_generator_attr("2.0", string | double_, 2.0);

Те же правила форматирования могут быть использованы для вывода строки. На этот раз мы поставляем строку<"example">, в результате чего первая альтернатива будет выбрана для генерируемого вывода.

boost::variant<std::string, double> v2("example");
test_generator_attr("example", string | double_, v2);
test_generator_attr("example", string | double_, "example");


PrevUpHomeNext

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




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



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


реклама


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

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