![]() |
![]() ![]() ![]() ![]() |
![]() |
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) ::
реклама |