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

Parser Directives Forcing Atomic Assignment (as<T>, as_string[], as_wstring[])

Boost , Spirit 2.5.2 , Parser Directives

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

Класс<as<T>>вынуждает атомное присвоение синтезированного атрибута субъекта. Обычно повторяющиеся парсеры (такие какKleeneи т.д.) или последовательности, обнажающие<vector<A>>, присваивают элементы поставляемому контейнеру в качестве их синтезированного атрибута, неоднократно вызывая<traits::push_back_container>. В некоторых случаях это может быть нежелательно. Класс<as<T>>создает директиву, которая передаст субъекту временный объект типа<T>. Если субъект парсер проходит, то временному объекту будет присвоен предоставленный директивой атрибут с единым вызовом.<traits::assign_to>. Если субъект парсера терпит неудачу, атрибут директивы не мутируется.

[Note]Note

<T>должен быть тип контейнера. Если<traits::is_container>не вернется истинно для<T>, то произойдет ошибка времени компиляции.

[Note]Note

<as<T>>неявно вызывает коммит/откат семантики, подобные по своей природе.<hold>директива.

[Caution]Caution

traits::push_back_container назначить временный объект к заданному атрибуту по умолчанию, в зависимости от о типах. Используйте интерфейс, описанный в Настройка , чтобы манипулировать семантикой этого задания операция. .

Header
// forwards to <boost/spirit/home/qi/directive/as.hpp>
#include <boost/spirit/include/qi_as.hpp>

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

Namespace

Имя

boost::spirit::as // alias: boost::spirit::qi::as

boost::spirit::as_string // alias: boost::spirit::qi::as_string

boost::spirit::as_wstring // alias: boost::spirit::qi::as_wstring

Synopsis
template <typename T>
struct as;
Template parameters

Параметр

Описание

по умолчанию

T

Тип контейнера. Нет

Model of

Notation

a

<Parser>.

t

Контейнер типа<T>.

attr

Атрибут, предоставленный директиве.

Expression Semantics

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

выражение

Семантика

as<T>()[a]

as_string[a]

эквивалентно<as<std::string>()[a]>

<as_wstring[a]>

Attributes

См.Составные обозначения атрибутов.

выражение

атрибут

as<T>()[a]

a: A --> as<T>()[a]: T

Complexity

Сложность определяется сложностью предметного парсера<a>и сложностью присвоения контейнера<t>поставляемому атрибуту<attr>.

Example
[Note]Note

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

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

using boost::spirit::utree;
using boost::spirit::utree_type;
using boost::spirit::utf8_symbol_type;
using boost::spirit::qi::as;
using boost::spirit::qi::as_string;
using boost::spirit::qi::char_;

<as<T>>,<as_string>и<as_wstring>:

Для правильной обработки сцепления струн<utree>мы используем<as_string[]>. Мы также используем<as<T>>для явного создания<utree>символьного узла.

utree ut;
typedef as<utf8_symbol_type> as_symbol_type;
as_symbol_type const as_symbol = as_symbol_type();
test_parser_attr("foo", as_string[*char_], ut);
std::cout << ut << std::endl; // will output >"foo"<
BOOST_ASSERT(ut.which() == utree_type::string_type);
ut.clear();
test_parser_attr("foo", as<std::string>()[*char_], ut);
std::cout << ut << std::endl; // will output >"foo"<
BOOST_ASSERT(ut.which() == utree_type::string_type);
ut.clear();
test_parser_attr("foo", as_symbol[*char_], ut);
std::cout << ut << std::endl; // will output >foo<
BOOST_ASSERT(ut.which() == utree_type::symbol_type);
ut.clear();
test_parser_attr("foo", as<utf8_symbol_type>()[*char_], ut);
std::cout << ut << std::endl; // will output >foo<
BOOST_ASSERT(ut.which() == utree_type::symbol_type);


PrevUpHomeNext

Статья Parser Directives Forcing Atomic Assignment (as<T>, as_string[], as_wstring[]) раздела Spirit 2.5.2 Parser Directives может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: Parser Directives ::


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-20 09:16:13/0.0072090625762939/0