![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Store a Parsed Attribute Value into a Container (Qi)Boost , Spirit 2.5.2 , Store Parsed Attribute Values into a Container (Qi)
|
![]() | Note |
---|---|
Этот файл заголовка не должен быть включен непосредственно какой-либо пользовательской программой, поскольку он обычно включается другими файлами заголовка Spirit, основанными на его содержании. |
Имя |
---|
< |
template <typename Container, typename Attrib, typename Enable> struct push_back_container { static bool call(Container& c, Attrib const& val); };
Параметр |
Описание |
по умолчанию |
---|---|---|
< | Нет | |
Attrib | Тип,< | Нет |
< | void |
Notation
C
Тип, используемый в качестве контейнера для хранения значений атрибутов.
c
Тип контейнера<C
>.
<Attrib
>
Тип, используемый в качестве контейнера для хранения значений атрибутов.
attr
Свойственный тип<Attrib
>.
T1
, T2
, ...Произвольные типы
выражение |
Семантика |
---|---|
push_back_container<C, Attrib>::call(c, attr) |
Духпредопределяет специализацию этой точки настройки для нескольких типов. В следующей таблице перечислены эти типы вместе с выставленными типами и соответствующей семантикой:
Параметры шаблонов |
Семантика |
---|---|
C , Attrib | c.insert(c.end(), attr) .
|
boost::optional<C> ,
Attrib | Если предоставленный экземпляр< |
boost::variant<T1,
T2,
...> , Attrib | mpl::true_ ,
push_back_container<TN,
Attrib> ,
рассматривая экземпляр, удерживаемый вариантом (типа TN ), как контейнер для хранения
атрибут in. В противном случае это вызовет утверждение.
|
unused_type | Ничего не делать. |
Точка настройки<push_back_container
>должна быть реализована для конкретного типа, когда этот тип должен использоваться в качестве атрибута вместо контейнера STL. Он применим только для парсеровSpirit.Qi. Как правило, он должен быть реализован всякий раз, когда определенный тип должен быть передан в качестве атрибута парсера, обычно обнажающего контейнер STL, и если тип не обнажает интерфейс контейнера STL (т.е. никакая функция не эквивалентна<c.insert(c.end(),attr)
>). Эти компоненты имеют правило распространения атрибутов в виде:
a: A --> Op(a): vector<A>
где<Op(a)
>означает любую осмысленную операцию на компоненте<a
>.
Если эта точка настройки реализована, могут потребоваться также следующие другие точки настройки.
Имя |
Когда внедрять |
---|---|
Вот пример реализации по умолчанию.<traits::container_value
>Точка настройки, предоставляемая библиотекой:
template <typename Container, typename T, typename Enable/* = void*/> struct push_back_container { static bool call(Container& c, T const& val) { c.insert(c.end(), val); return true; } };
Этот шаблон инстанцируется библиотекой в соответствующих местах при использовании поставляемого контейнера и типов элементов в качестве аргументов шаблона. Функция<call()
>элемента будет вызываться всякий раз, когда элемент должен быть добавлен в поставляемый контейнер.
Следующий пример показывает предопределенную специализацию<unused_type
>:
template <typename Container> bool push_back(Container&, unused_type) { return true; }
Определяет функцию пустого элемента<call()
>.
Статья Store a Parsed Attribute Value into a Container (Qi) раздела Spirit 2.5.2 Store Parsed Attribute Values into a Container (Qi) может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: Store Parsed Attribute Values into a Container (Qi) ::
реклама |