![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Attribute Transformation Pseudo Parser (attr_cast)Boost , Spirit 2.5.2 , Auxiliary Parsers
|
Имя |
---|
boost::spirit::attr_cast //
alias: boost::spirit::qi::attr_cast |
template <Exposed, Transformed> <unspecified> attr_cast(<unspecified>);
Параметр |
Описание |
по умолчанию |
---|---|---|
Exposed | < | |
< | < |
<attr_cast
>— это строение. Его можно вызвать с помощью следующих схем:
attr_cast(p) attr_cast<Exposed>(p) attr_cast<Exposed, Transformed>(p)
В зависимости от того, какой из типов атрибутов может быть выведен правильно, если не указано явно.
Notation
p
Объект парсера.
Семантика выражения определяется только там, где она отличается от или не определена в<UnaryParser
>.
выражение |
Семантика |
---|---|
attr_cast(p) | Создайте компонент, вызывающий парсер< |
attr_cast<Exposed>(p) | Создайте компонент, вызывающий парсер< |
attr_cast<Exposed,
Transformed>(p) |
выражение |
атрибут |
---|---|
attr_cast(p) | < |
attr_cast<Exposed>(p) | p:
A -->
attr_cast<Exposed>(p):
Exposed |
attr_cast<Exposed,
Transformed>(p) | p:
A -->
attr_cast<Exposed,
Transformed>(p):
Exposed |
Сложность этого компонента полностью определяется сложностью встроенного парсера<
p
>.
![]() | 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;
Статья Attribute Transformation Pseudo Parser (attr_cast) раздела Spirit 2.5.2 Auxiliary Parsers может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: Auxiliary Parsers ::
реклама |