![]() |
![]() ![]() ![]() ![]() |
![]() |
The MPL Reference Manual: BOOST_MPL_HAS_XXX_TEMPLATE_NAMED_DEFBoost , ,
|
||||||||||||||||||||||||||||||||||
| Front Page / Macros / Introspection / BOOST_MPL_HAS_XXX_TEMPLATE_NAMED_DEF |
#define BOOST_MPL_HAS_XXX_TEMPLATE_NAMED_DEF(trait, name, default_) \ unspecified token sequence \ /**/
Расширяется в определение булевойМетафункцияХарактеристикаДля любого типаxчерта
На недостающих компиляторах, не способных выполнять обнаружение,trait
#include <boost/mpl/has_xxx.hpp>
| Parameter | Requirement | Description |
|---|---|---|
| черта | Юридический идентификатор Token | Название создаваемой метафункции. |
| Имя | Юридический идентификатор Token | Имя члена обнаружено. |
| default_ | Булева постоянная | Откатное значение для неполноценных компиляторов. |
Для любых легальных идентификаторов C++чертаиимя, булева постоянная экспрессияc1, булеваИнтегральная постояннаяc2и произвольный типx:
BOOST_MPL_HAS_XXX_TEMPLATE_NAMED_DEF(trait, name, c1)
| Precondition: | Appears at namespace scope. |
||||||||
|---|---|---|---|---|---|---|---|---|---|
| Return type: | None. |
||||||||
| Semantics: | Expands into an equivalent of the following class template definition
template<
typename X
, typename fallback = boost::mpl::bool_<c1>
>
struct trait
{
// unspecified
// ...
};
гдечертаявляется булевойМетафункциясо следующей семантикой: typedef trait<x>::type r;
typedef trait< x, c2 >::type r;
|
BOOST_MPL_HAS_XXX_TEMPLATE_NAMED_DEF( has_xxx, xxx, false ) struct test1 {}; struct test2 { void xxx(); }; struct test3 { int xxx; }; struct test4 { static int xxx(); }; struct test5 { typedef int xxx; }; struct test6 { struct xxx; }; struct test7 { typedef void (*xxx)(); }; struct test8 { typedef void (xxx)(); }; struct test9 { template< class T > struct xxx {}; }; BOOST_MPL_ASSERT_NOT(( has_xxx<test1> )); BOOST_MPL_ASSERT_NOT(( has_xxx<test2> )); BOOST_MPL_ASSERT_NOT(( has_xxx<test3> )); BOOST_MPL_ASSERT_NOT(( has_xxx<test4> )); BOOST_MPL_ASSERT_NOT(( has_xxx<test5> )); BOOST_MPL_ASSERT_NOT(( has_xxx<test6> )); BOOST_MPL_ASSERT_NOT(( has_xxx<test7> )); BOOST_MPL_ASSERT_NOT(( has_xxx<test8> )); #if !defined(BOOST_MPL_CFG_NO_HAS_XXX_TEMPLATE) BOOST_MPL_ASSERT(( has_xxx<test9> )); #endif BOOST_MPL_ASSERT(( has_xxx<test9, true_> ));
Статья The MPL Reference Manual: BOOST_MPL_HAS_XXX_TEMPLATE_NAMED_DEF раздела может быть полезна для разработчиков на c++ и boost.
:: Главная :: ::
реклама |