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

Iterator Based Generator API

Boost , Spirit 2.5.2 , Generator API

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

Библиотека предоставляет несколько бесплатных функций для создания щелчка. Функции генератора имеют две формы. Первая форма<generate>конкатенирует выход, генерируемый вовлеченными компонентами, без вставки какого-либо вывода между ними. Второй<generate_delimited>перемежает выход, генерируемый вовлеченными компонентами с использованием данного генератора разграничителя. Обе версии могут принимать атрибуты по (постоянной) ссылке, которые удерживают значения атрибутов на выходе.

Header
// forwards to <boost/spirit/home/karma/generate.hpp>
#include <boost/spirit/include/karma_generate.hpp>

Для вариадных атрибутов:

// forwards to <boost/spirit/home/karma/generate_attr.hpp>
#include <boost/spirit/include/karma_generate_attr.hpp>

Версия API с вариадными атрибутами позволяет передавать один или несколько атрибутов в функции<generate>. Функции, принимающие два или более атрибутов, могут использоваться, когда выражение генератора являетсяпоследовательностью (<<<>). Только. В этом случае каждый из переданных атрибутов должен соответствовать соответствующей части последовательности.

Для функций API выводится правильный (соответствующий) тип генератора из поставляемого типа атрибута:

// forwards to <boost/spirit/home/karma/detail/generate_auto.hpp>
#include <boost/spirit/include/karma_generate_auto.hpp>

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

Namespace

Имя

<boost::spirit::karma::generate>

<boost::spirit::karma::generate_delimited>

<boost::spirit::karma::delimit_flag::predelimit>

<boost::spirit::karma::delimit_flag::dont_predelimit>

Synopsis
namespace boost { namespace spirit { namespace karma
{
    template <typename OutputIterator, typename Expr>
    inline bool
    generate(
        OutputIterator& sink
      , Expr const& expr);
    template <typename OutputIterator, typename Expr
      , typename Attr1, typename Attr2, ..., typename AttrN>
    inline bool
    generate(
        OutputIterator& sink
      , Expr const& expr
      , Attr1 const& attr1, Attr2 const& attr2, ..., AttrN const& attrN);
    template <typename OutputIterator, typename Expr, typename Delimiter>
    inline bool
    generate_delimited(
        OutputIterator& sink
      , Expr const& expr
      , Delimiter const& delimiter
      , BOOST_SCOPED_ENUM(delimit_flag) pre_delimit = delimit_flag::dont_predelimit);
    template <typename OutputIterator, typename Expr, typename Delimiter
      , typename Attr1, typename Attr2, ..., typename AttrN>
    inline bool
    generate_delimited(
        OutputIterator& sink
      , Expr const& expr
      , Delimiter const& delimiter
      , Attr1 const& attr1, Attr2 const& attr2, ..., AttrN const& attrN);
    template <typename OutputIterator, typename Expr, typename Delimiter
      , typename Attr1, typename Attr2, ..., typename AttrN>
    inline bool
    generate_delimited(
        OutputIterator& sink
      , Expr const& expr
      , Delimiter const& delimiter
      , BOOST_SCOPED_ENUM(delimit_flag) pre_delimit
      , Attr1 const& attr1, Attr2 const& attr2, ..., AttrN const& attrN);
}}}
[Note] Note

Начиная сSpiritV2.5 (распределяется с Boost V1.47) заполнитель<_val>может использоваться в семантических действиях, присоединенных к компонентам генератора верхнего уровня. В этом случае<_val>относится к поставляемому атрибуту в целом. Для функций API более одного аргумента атрибута<_val>будет относиться к вектору Fusion или ссылкам на атрибуты.

Spirit.KarmaФункции генератора API, основанные на автоматическом создании соответствующего типа генератора:

namespace boost { namespace spirit { namespace karma
{
    template <typename OutputIterator, typename Attr, typename Delimiter>
    inline bool
    generate_delimited(
        OutputIterator& sink
      , Attr const& attr
      , Delimiter const& delimiter
      , BOOST_SCOPED_ENUM(delimit_flag) pre_delimit = delimit_flag::dont_predelimit);
    template <typename OutputIterator, typename Attr>
    inline bool
    generate(
        OutputIterator& sink
      , Attr const& attr);
}}}

Все функции выше возвращают<true>, если ни один из задействованных компонентов генератора не вышел из строя, и<false>в противном случае. Если в процессе генерации выходного потока базовый выходной поток сообщает об ошибке, то значение возврата также будет<false>.

Максимальное количество поддерживаемых аргументов ограничено константой препроцессора<SPIRIT_ARGUMENTS_LIMIT>. Эта постоянная по умолчанию соответствует значению, определенному константой препроцессора<PHOENIX_LIMIT>(которая, в свою очередь, по умолчанию равна<10>).

[Note] Note

Вариадные функции с двумя или более атрибутами внутренне объединяют (постоянные) ссылки на все переданные атрибуты в<fusion::vector>и передают это как комбинированный атрибут соответствующей функции, принимая один атрибут.

Функции<generate_delimited>, не принимающие явного<delimit_flag>, как один из их аргументов, не вызывают принятый делимитер, прежде чем начать генерировать выход из экспрессии генератора. Это можно сделать, используя другую версию этой функции при переходе<delimit_flag::predelimit>к соответствующему аргументу.

Template parameters

Параметр

Описание

<OutputIterator>

<OutputIterator>получение сгенерированного результата.

<Expr>

50 Выражение, которое может быть преобразовано в генератор кармы.

<Delimiter>

Генератор используется для разграничения вывода компонентов выражения.

<Attr>

Тип атрибута, используемый для создания соответствующего типа генератора.

<Attr1>,<Attr2>, ...,<AttrN>

Один или несколько атрибутов.


PrevUpHomeNext

Статья Iterator Based Generator API раздела Spirit 2.5.2 Generator API может быть полезна для разработчиков на c++ и boost.




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



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


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 19:45:27/0.0074300765991211/0