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

Transform an Attribute to a Different Type (Qi and Karma)

Boost , Spirit 2.5.2 , Customization of Spirit's Attribute Handling

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
transform_attribute

Шаблон<transform_attribute>— это тип, используемый в качестве точки настройки атрибута. Он вызываетсяЦи<rule>, семантическим действием и<attr_castкармой.<rule>Семантическое действие и<attr_cast>. Он используется для автоматического преобразования предоставленного пользователем атрибута в тип атрибута, ожидаемый компонентом правой стороны (для<rule>), семантическим действием или встроенным компонентом (для<attr_cast>).

[Note] Note

Интерфейс этой точки настройки был изменен с помощью Boost V1.44. Мы добавили<Domain>шаблонный параметр, чтобы обеспечить более тонкие зернистые специализации дляSpirit.QiиДух. Карма.

Module Headers
#include <boost/spirit/home/support/attributes.hpp>

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

[Note] Note

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

Namespace

Имя

<boost::spirit::traits>

Synopsis
template <typename Exposed, typename Transformed, typename Domain, typename Enable>
struct transform_attribute
{
    typedef <unspecified> type;
    static type pre(Exposed& val);
    static void post(Exposed& val, type attr);    // Qi only
    static void fail(Exposed&);                   // Qi only
};
Template parameters

Параметр

Описание

по умолчанию

<Exposed>

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

Нет

<Transformed>

Тип атрибута, ожидаемый компонентом в результате преобразования.

Нет

<Domain>

Домен подбиблиотеки шаблон инстанцируется в. Обычно это либо<qi::domain>, либо<karma::domain>.

Нет

<Enable>

Параметр шаблона помощника, используемый для выборочного включения или отключения определенных специализаций<transform_attribute>с использованием SFINAE (то есть<boost::enable_if>или<boost::disable_if>).

<void>

Notation

Exposed

Тип<Exposed>является типом атрибута, переданного пользователем.

Transformed

<Transformed>— тип атрибута, передаваемого в правую сторону<rule>(встроенный компонент<attr_cast>).

Domain

Домен подбиблиотеки шаблон инстанцируется в. Как правило, это<qi::domain>или<karma::domain>.

exposed

Пример типа<Exposed>.

transformed

Пример типа<Transformed>.

Expression Semantics

выражение

Семантика

<transform_attribute<Exposed,Transformed,Domain>::type>

Оценивает тип, который будет использоваться в результате преобразования (для передачи на правую сторону<rule>или на встроенный компонент<attr_cast>). Большую часть времени это равно<Transformed>, но в других случаях это может оцениваться до<Transformed&>вместо того, чтобы избегать лишнего создания объекта.

<
typetransform_attribute<Exposed,Transformed,Domain>::pre(exposed)
>

Делайте<pre>- преобразование перед вызовом правой стороны компонента для<rule>(или встроенного компонента для<attr_cast>). Это принимает атрибут, поставляемый пользователем (типа<Exposed>), и возвращает атрибут, который передается по иерархии компонентов (типа, раскрытого метафункцией<type>). Эта функция будет называться вЦии для.Карма

<
voidtransform_attribute<Exposed,Transformed,Domain>::post(exposed,transformed)
>

Do<post>- преобразование после вызова правого бокового компонента для<rule>(или встроенного компонента для<attr_cast>). Это принимает исходный атрибут, предоставленный пользователем, и атрибут, возвращенный с правой стороны (встроенный) компонент и, как ожидается, распространяет результат обратно в поставленный экземпляр атрибута. Эта функция будет называться только вЦи.

<
voidtransform_attribute<Exposed,Transformed,Domain>::fail(exposed)
>

Обработка неисправных операций разбора правого бокового компонента для<rule>(или встроенного компонента для<attr_cast>). Эта функция будет называться только вЦи.

Predefined Specializations

Параметры шаблона

Семантика

<Exposed>,<Transformed>

<type>оценивает<Transformed>,<pre()>возвращает новый экземпляр<Transformed>, построенный из аргумента типа<Exposed>,<post()>присваивает<transformed><exposed>.

<optional<Exposed>>,<Transformed>,<typenamedisable_if<is_same<optional<Exposed>,Transformed>>::type>

<type>оценивает до<Transformed&>,<pre()>возвращает ссылку на экземпляр<Transformed>, хранящийся в принятом факультативном (аргумент типа<optional<Exposed>>), факультативный экземпляр инициализируется, если это необходимо.<post()>ничего не делает,<fail()>сбрасывает необязательный (его параметр) экземпляр в неинициализированное состояние.

<Exposed&>,<Transformed>

<type>оценивает<Transformed>,<pre()>возвращает новый экземпляр<Transformed>, построенный из аргумента типа<Exposed>,<post()>присваивает<transformed><exposed>.

<Attrib&>,<Attrib>

<type>оценивает<Attrib&>,<pre()>возвращает его аргумент,<post()>ничего не делает.

<Exposedconst>,<Transformed>

Карматолько)<type>оценивает<Transformed>,<pre()>возвращает его аргумент,<post()>не реализован.

<Attribconst&>,<Attrib>

Карматолько)<type>оценивает<Attrib const&>,<pre()>возвращает его аргумент,<post()>не реализован.

<Attribconst>,<Attrib>

Карматолько)<type>оценивает<Attrib const&>,<pre()>возвращает его аргумент,<post()>не реализован.

<unused_type>,<Attrib>

<type>оценивает<unused_type>,<pre()>и<post()>ничего не делают.

<Attrib>,<unused_type>

<type>оценивает<unused_type>,<pre()>и<post()>ничего не делают.

When to implement

Точка настройки<transform_attribute>должна быть реализована для конкретной пары типов, когда тип атрибута, поставляемый в<rule>или<attr_cast>, не может автоматически трансформироваться в тип атрибута, ожидаемый правой стороной<rule>(встроенный компонент<attr_cast>), поскольку реализация по умолчанию, как показано выше, не применима. Примером может служить то, что тип<Transformed>не может быть построен из типа<Exposed>.


PrevUpHomeNext

Статья Transform an Attribute to a Different Type (Qi and Karma) раздела Spirit 2.5.2 Customization of Spirit's Attribute Handling может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: Customization of Spirit's Attribute Handling ::


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 21:18:16/0.0080819129943848/0