Description
BOOST_TTI_TRAIT_HAS_TYPE — макрос, расширяющийся до метафункции. Метафункция проверяет, существует ли внутренний тип с определенным именем и, необязательно, является ли выражение лямбда, вызванное внутренним типом, истинным или нет.
trait = имя метафункции в пространстве имен tti.
Имя = имя внутреннего типа.
Он генерирует метафункцию, называемую чертой, где черта является макропараметром. шаблонstruct trait { статическое значение const = неуточненное; typedef mpl::bool_type; }; Типы метафункций и возврат: BOOST_TTI_TP_T = прилагаемый тип, в котором нужно искать наше «имя». BOOST_TTI_TP_U = (необязательно) Дополнительный параметр шаблона, по умолчанию для типа маркера. Если это указано, это лямбда-выражение MPL, которое вызывается с найденным внутренним типом и должно возвращать постоянное булево значение. Доходность = «значение» зависит от того, является ли факультативным Указывается BOOST_TTI_TP_U. Если BOOST_TTI_TP_U не указан, то «значение» истинно, если тип «имя» существует в прилагаемом типе. BOOST_TTI_TP_T; в противном случае значение является ложным. Если BOOST_TTI_TP_U указан, то «значение» истинно, если тип «имя» существует в прилагаемом типе. BOOST_TTI_TP_T и лямбда-выражение, указанное BOOST_TTI_TP_U, вызванное прохождением фактического внутреннего типа «имя», возвращает «значение» истинного; в противном случае «значение» является ложным. Действие, предпринятое с BOOST_TTI_TP_U, происходит только тогда, когда тип «имя» существует в прилагаемом типе BOOST_TTI_TP_T.
Пример использования:
BOOST_TTI_TRAIT_HAS_TYPE (LookFor,MyType) генерирует метафункцию LookFor в текущей области для поиска внутреннего типа под названием MyType.
LookFor:: Ценность истинна, если MyType является внутренним типом EnclosingType, иначе ложным.
LookFor:: значение истинно, если MyType является внутренним типом EnclosingType и вызов ALambdaExpression с внутренним типом возвращает значение истинного, иначе ложного.
Популярное использование дополнительного лямбда-выражения MPL заключается в проверке того, является ли найденный тип тем же, что и другой тип, когда найденный тип является типдефом. В этом случае нашим примером будет:
LookFor>:: значение истинно, если MyType является внутренним типом EnclosingType и является тем же типом, что и SomeOtherType.