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