Description
trait = название метафункции. ... = переменные параметры. Первый вариадный параметр — это название шаблона внутреннего класса. Следующие вариадные параметры являются необязательными. Если не существует следующих вариадных параметров, то интроспектируемым шаблоном внутреннего класса должны быть все параметры типа шаблона (параметры шаблона, начинающиеся с «класса» или «имя типа»), и может произойти любое количество параметров типа шаблона. Если второй вариадный параметр является BOOST_PP_NIL и не указан другой вариадный параметр, то, как и в предыдущем случае, интроспектируемый шаблон внутреннего класса должен иметь все параметры типа шаблона (параметры шаблона, начинающиеся с «класса» или «имя типа»), и может произойти любое количество параметров типа шаблона. Эта форма допускается для согласования с использованием невариадной формы этого макроса. Если второй вариадный параметр представляет собой массив библиотеки предварительного процессора Boost, и никакой другой вариадный параметр не дается, то шаблон внутреннего класса должен иметь свои шаблонные параметры, соответствующие последовательности в кортежной части массива Boost PP. Эта форма допускается для согласования с использованием невариадной формы этого макроса. В противном случае шаблон внутреннего класса должен иметь свои шаблонные параметры, соответствующие последовательности необязательных вариадных параметров.
Он генерирует метафункцию, называемую чертой, где черта является первым макропараметром. шаблонstruct trait { static const value = unspecified; typedef mpl::bool_type; }; Типы метафункций и возврат: BOOST_TTI_TP_T = прилагаемый тип, в котором искать наше «имя». возврат = «значение» является истинным, если шаблон «имя» существует в прилагаемом типе, в противном случае «значение» является ложным.
Примеры:
1) Поиск шаблона внутреннего класса под названием "MyTemplate" со всеми параметрами типов шаблонов, вложенных в класс "MyClass" с использованием метафункции "MyMeta".
BOOST_TTI_TRAIT_HAS_TEMPLATE (MyMeta, MyTemplate)
или
BOOST_TTI_TRAIT_HAS_TEMPLATE(MyMeta,MyTemplate,BOOST_PP_NIL) // Невариадная макроформа
MyMeta::value
Это составная временная булева постоянная, которая является либо «истинной», либо «ложной», если вложенный шаблон существует.
2) Поиск шаблона внутреннего класса под названием "MyTemplate" с параметрами шаблона "class T,int x,templateclass U", вложенного в класс "MyClass" с использованием метафункционального названия "MyMeta".
BOOST_TTI_TRAIT_HAS_TEMPLATE(MyMeta,MyTemplate,class,int,templateclass)
или
BOOST_TTI_TRAIT_HAS_TEMPLATE(MyMeta,MyTemplate,(3,(class,int,templateclass))) // Невариадная макроформа
MyMeta::value
Это составная временная булева постоянная, которая является либо «истинной», либо «ложной», если вложенный шаблон существует.