![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Determine the Type to be Stored in a Container (Qi)Boost , Spirit 2.5.2 , Store Parsed Attribute Values into a Container (Qi)
|
![]() | Note |
---|---|
Этот файл заголовка не должен быть включен непосредственно какой-либо пользовательской программой, поскольку он обычно включается другими файлами заголовка Spirit, основанными на его содержании. |
Имя |
---|
< |
template <typename Container, typename Enable> struct container_value { typedef <unspecified> type; };
Параметр |
Описание |
по умолчанию |
---|---|---|
< | Нет | |
Enable | < |
C
Тип, подлежащий тестированию, должен ли он рассматриваться как контейнер.
T1
, T2
, ...Произвольные типы
выражение |
Семантика |
---|---|
container_value<C>::type | Метафункция, которая оценивает тип, который должен храниться в данном типе контейнера< |
Духпредопределяет специализацию этой точки настройки для нескольких типов. В следующей таблице перечислены эти типы вместе с выставленными типами и соответствующей семантикой:
Параметры шаблонов |
Семантика |
---|---|
< | value_type C .
|
boost::optional<C> | |
boost::variant<T1,
T2,
...> | Возврат< |
< | Возвращение< |
Точка настройки<is_container
>должна быть реализована для конкретного типа, когда этот тип должен использоваться в качестве атрибута вместо контейнера STL. Он применим только для парсеровSpirit.Qi. Как правило, он должен быть реализован всякий раз, когда определенный тип должен быть передан в качестве атрибута парсера, обычно обнажающего STL-контейнер, и если этот тип не обнажает интерфейс STL-контейнера (т.е. не встраиваемый типдеф для<value_type
>). Эти компоненты имеют правило распространения атрибутов в виде:
a: A --> Op(a): vector<A>
где<Op(a)
>означает любую осмысленную операцию на компоненте<a
>.
Если эта точка настройки реализована, могут потребоваться также следующие другие точки настройки.
Имя |
Когда внедрять |
---|---|
traits::push_back_container | |
traits::clear_value |
Вот пример реализации по умолчанию.<traits::container_value
>Точка настройки, предоставляемая библиотекой:
template <typename Container, typename Enable/* = void*/> struct container_value : detail::remove_value_const<typename Container::value_type> {};
Этот шаблон инстанцируется библиотекой в соответствующих местах при использовании поставляемого типа контейнера в качестве аргумента шаблона. Встроенный<type
>используется как тип атрибута при разборе элементов для хранения в этом контейнере.
Следующий пример показывает предопределенную специализацию<unused_type
>:
template <> struct container_value<unused_type> { typedef unused_type type; };
(62) также<unused_type
>, таким образом распространяя статус атрибута «не заботится» на встроенный парсер.
Статья Determine the Type to be Stored in 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) ::
реклама |