![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Symbols Generator (symbols)Boost , Spirit 2.5.2 , String Generators
|
Имя |
---|
< |
template <typename Attrib, typename T, typename Lookup , typename CharEncoding, typename Tag> struct symbols;
Параметр |
Описание |
по умолчанию |
---|---|---|
< | Тип исходного атрибута, используемого в качестве ключа в генераторе символов (символ). | < |
< | Тип данных, связанный с каждым ключом. | < |
< | Реализация поиска символов | если T< |
< | Используется для выбора набора символов, обычно не используется конечным пользователем. | < |
< | Используется для выбора набора символов, обычно не используется конечным пользователем. | < |
Notation
Семантика выражения определяется только там, где она отличается от или не определена в<PrimitiveGenerator
>.
выражение |
Семантика |
---|---|
< | Постройте пустой экземпляр объекта с символами< |
< | Постройте пустой экземпляр объекта символов< |
< | Копии строят символы из< |
< | Конструкция символов из< |
< | Построение символов из< |
< | Построить символы из< |
< | Построить символы из< |
< | Назначить< |
< | Назначить один или несколько символов< |
< | Добавить один или несколько символов< |
< | Добавить один или несколько символов< |
< | Добавить один или более символов< |
< | Удалить один или несколько символов< |
< | Удалить один или несколько символов< |
< | Удалите все символы< |
< | Возврат ссылки на объект, связанный с символом< |
< | Возврат указателя на объект, связанный с символом< |
< | Для каждого символа в< |
< | Восстановите текущее имя объекта символов. |
< | Установите текущее имя объекта символов< |
Генератор символов использует поставляемый атрибут в качестве ключа для поиска во внутреннем ассоциативном контейнере. Если ключ существует, генератор испускает связанное значение и преуспевает (если основной выходной поток не сообщает об ошибке). Если тип значения, хранящийся в генераторе символов<unused_type
>, будет излучать ключ. Если ключа не существует, генератор выходит из строя, ничего не испуская.
Атрибут<symbol<Attrib,T>
>—<Attrib
>.
Если поставляемый атрибут является последовательностьюBoost.Fusion, то генератор таблицы символов будет использовать первый элемент этой последовательностиBoost.Fusionв качестве ключа для поиска. Тип этого первого элемента должен быть конвертируемым в<Attrib
>. В этом случае второй элемент последовательностиBoost.Fusionиспользуется в качестве атрибута при вызове генератора, полученного из значения, хранящегося в таблице символов для найденной записи.
Если поставляемым атрибутом является тип контейнера (<traits::is_container
>разрешает<mpl::true_
>), то генератор таблицы символов будет использовать первый элемент, хранящийся в этом контейнере, в качестве ключа для поиска.<value_type
>(возвращается<traits::container_value
>) должен быть конвертируемым в<Attrib
>. В этом случае второй элемент, хранящийся в этом контейнере, используется в качестве атрибута при вызове генератора, полученного из значения, хранящегося в таблице символов для найденной записи.
Если поставляемый атрибут не является последовательностьюBoost.Fusionи не является типом контейнера, поставляемый атрибут непосредственно используется в качестве ключа для поиска элемента. Атрибут используется в качестве атрибута при вызове генератора, полученного из значения, хранящегося в таблице символов для найденной записи.
В любом случае, поскольку поставляемый ключ (т.е. либо первый элемент последовательностиBoost.Fusion, первый элемент контейнера, или атрибут иным образом) передается в качестве атрибута генератору, полученному из значения, хранящегося в таблице символов для найденной записи, таблица символов может хранить генераторы, которые будут производить выход на основе этого значения. Например:
// The symbol table maps a single character key to a rule<> // The rule<> exposes an attribute of char as well rule<output_iterator_type, char()> r1 = char_; symbols<char, rule<output_iterator_type, char()> > sym; sym.add ('j', r1.alias()) ('h', r1.alias()) ('t', r1.alias()) ('k', r1.alias()) ; // Supplying a fusion vector as the attribute will use the first element // (the 'j') as the key to be looked up, while the second element (the 'J') // is passed on as the attribute to the rule<> stored in the symbol table. // Consequently, the example generates a single 'J'. BOOST_ASSERT(test("J", sym, make_vector('j', 'J')));
Реализация по умолчанию использует<std::map<>
>или<std::set<>
>со сложностью:
O(log n)
где n - количество хранимых символов.
![]() | 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::symbols;
Использование генераторов<symbol
>:
symbols<char, char const*> sym; sym.add ('a', "Apple") ('b', "Banana") ('o', "Orange") ; test_generator_attr("Banana", sym, 'b');
Статья Symbols Generator (symbols) раздела Spirit 2.5.2 String Generators может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: String Generators ::
реклама |