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

Attribute Transformation Pseudo Parser (attr_cast)

Boost , Spirit 2.5.2 , Auxiliary Parsers

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/qi/auxiliary/attr_cast.hpp>
#include <boost/spirit/include/qi_attr_cast.hpp>

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

Namespace

Имя

boost::spirit::attr_cast // alias: boost::spirit::qi::attr_cast

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

Параметр

Описание

по умолчанию

Exposed

<unused_type>

<Transformed>

<unused_type>

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

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

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

Model of

Notation

p

Объект парсера.

Expression Semantics

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

выражение

Семантика

attr_cast(p)

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

attr_cast<Exposed>(p)

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

attr_cast<Exposed, Transformed>(p)

Attributes

выражение

атрибут

attr_cast(p)

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

attr_cast<Exposed>(p)

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

attr_cast<Exposed, Transformed>(p)

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

Complexity

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

Example
[Note]Note

Тестовый ремень для примера (примеров) ниже представлен в разделеОсновные примеры.

Некоторые используют декларации:

using boost::spirit::qi::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
{
    // in this case we just expose the embedded 'int' as the attribute instance
    // to use, allowing to leave the function 'post()' empty
    template <>
    struct transform_attribute<int_data, int, qi::domain>
    {
        typedef int& type;
        static int& pre(int_data& d) { return d.i; }
        static void post(int_data& val, int const& attr) {}
        static void fail(int_data&) {}
    };
}}}

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

int_data d = { 0 };
test_parser_attr("1", boost::spirit::qi::attr_cast(int_), d);
std::cout << d.i << std::endl;


PrevUpHomeNext

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




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



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


реклама


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

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