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

Attribute Transformation Pseudo Generator (attr_cast)

Boost , Spirit 2.5.2 , Auxiliary Generators

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

Компонент<attr_cast<Exposed, Transformed>()>вызывает встроенный генератор при подаче атрибута типа<Transformed>. Поставляемый атрибут создается из исходного атрибута (типа<Exposed>), переданного этому компоненту с помощью точки настройки.<traits::transform_attribute>.

Header
// forwards to <boost/spirit/home/karma/auxiliary/attr_cast.hpp>
#include <boost/spirit/include/karma_attr_cast.hpp>

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

Namespace

Имя

<boost::spirit::attr_cast// alias: boost::spirit::karma::attr_cast>

Synopsis
template <Exposed, Transformed>
<unspecified> attr_cast(<unspecified>);
Template parameters

Параметр

Описание

по умолчанию

<Exposed>

Тип атрибута, предоставленного<attr_cast>

.

<unused_type>

<Transformed>

Тип атрибута, ожидаемого встроенным генератором<g>

.

<unused_type>

<attr_cast>является производным. Его можно вызвать с помощью следующих схем:

attr_cast(g)
attr_cast<Exposed>(g)
attr_cast<Exposed, Transformed>(g)

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

Model of

Notation

g

Объект-генератор.

Expression Semantics

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

выражение

Семантика

<attr_cast(g)>

Создайте компонент, вызывающий генератор<g>при прохождении атрибута типа, как обычно ожидается<g>. Тип поставляемого атрибута будет преобразован в тип<g>экспонируется как его тип атрибута (с помощью точки настройки атрибута<traits::transform_attribute>). Этот генератор не выйдет из строя, если только<g>не выйдет из строя.

<attr_cast<Exposed>(g)>

Создайте компонент, вызывающий генератор<g>при прохождении атрибута типа, как обычно ожидается<g>. Предполагается, что поставляемый атрибут относится к типу<Exposed>, он будет преобразован в тип<g>, который раскрывается как тип атрибута (с использованием точки настройки атрибута<traits::transform_attribute>). Этот генератор не выходит из строя, если только<g>не выходит из строя.

<attr_cast<Exposed, Transformed>(g)>

Создайте компонент, вызывающий генератор<g>при прохождении атрибута типа<Transformed>. Предполагается, что поставляемый атрибут относится к типу<Exposed>, он будет преобразован в тип<Transformed>(с использованием точки настройки атрибута<traits::transform_attribute>). Этот генератор не выйдет из строя, если<g>не выйдет из строя.

Attributes

выражение

атрибут

<attr_cast(g)>

<g: A--> attr_cast(g): A>

<attr_cast<Exposed>(g)>

<g: A--> attr_cast<Exposed>(g): Exposed>

<attr_cast<Exposed, Transformed>(g)>

<g: A--> attr_cast<Exposed, Transformed>(g): Exposed>

Complexity

Сложность этого компонента полностью определяется сложностью встроенного генератора<g>.

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::int_;

Пример ссылается на структуру данных<int_data>, которая нуждается в специализации точки настройки<traits::transform_attribute>:

// this is just a test structure we want to use in place of an int
struct int_data
{
    int i;
};
// we provide a custom attribute transformation to allow its use as an int
namespace boost { namespace spirit { namespace traits
{
    template <>
    struct transform_attribute<int_data const, int, karma::domain>
    {
        typedef int type;
        static int pre(int_data const& d) { return d.i; }
    };
}}}

Теперь мы используем псевдогенератор<attr_cast>для вызова преобразования атрибутов:

int_data d = { 1 };
test_generator_attr("1", boost::spirit::karma::attr_cast(int_), d);


PrevUpHomeNext

Статья Attribute Transformation Pseudo Generator (attr_cast) раздела Spirit 2.5.2 Auxiliary Generators может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: Auxiliary Generators ::


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 23:14:41/0.0073468685150146/0