![]() |
![]() ![]() ![]() ![]() |
![]() |
Determine if a Type Should be Treated as a Container (Qi and Karma)Boost , Spirit 2.5.2 , Customization of Spirit's Attribute Handling
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() |
Note |
|---|---|
Этот файл заголовка не должен быть включен непосредственно какой-либо пользовательской программой, поскольку он обычно включается другими файлами заголовка Spirit, основанными на его содержании. |
|
Имя |
|---|
< |
template <typename Container, typename Enable> struct is_container { <unspecified>; };
|
Параметр |
Описание |
по умолчанию |
|---|---|---|
< |
Тип,< |
Нет |
< |
Параметр шаблона помощника, используемый для выборочного включения или отключения определенных специализаций< |
< |
Notation
CТип, подлежащий тестированию, должен ли он рассматриваться как контейнер.
T1, T2, ...Произвольные типы
|
выражение |
Семантика |
|---|---|
< |
Результат метафункции, которая оценивает до< |
Духпредопределяет специализацию этой точки настройки для нескольких типов. В следующей таблице перечислены эти типы вместе с условиями, для которых соответствующие специализации будут оцениваться до<mpl::true_>(см.MPL Boolean Constant):
|
Параметры шаблонов |
Семантика |
|---|---|
< |
Возвращается< |
< |
Возвращение< |
< |
Возвращается< |
< |
Возвращение< |
Точка настройки<is_container>должна быть реализована для конкретного типа, когда этот тип должен использоваться в качестве атрибута вместо контейнера STL. Он применим для парсеровSpirit.Qiи генераторовSpirit.Karma. Как правило, он должен быть реализован всякий раз, когда определенный тип должен быть передан в качестве атрибута парсера или генератора, обычно обнажающего STL-контейнер,<C>и если тип не обнажает интерфейс STL-контейнера (то есть<is_container<C>::type>обычно возвращается<mpl::false_>). Эти компоненты имеют правило распространения атрибутов в виде:
a: A --> Op(a): vector<A>
где<Op(a)>означает любую осмысленную операцию на компоненте<a>.
Если эта точка настройки реализована, могут потребоваться также следующие другие точки настройки.
|
Имя |
Когда внедрять |
|---|---|
Необходимо осуществлять всякий раз, когда< |
|
Карма:Список< |
|
Карма:Список< |
|
Карма:Список< |
|
Карма:Список< |
|
Карма:Список< |
|
Карма:Список< |
|
Примеры использования точки настройки<is_container>см. здесь:embedded_container_example,use_as_containerиcounter_example.
Статья Determine if a Type Should be Treated as a Container (Qi and Karma) раздела Spirit 2.5.2 Customization of Spirit's Attribute Handling может быть полезна для разработчиков на c++ и boost.
:: Главная :: Customization of Spirit's Attribute Handling ::
реклама |