Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

The MPL Reference Manual: BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF

Boost , ,

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

Front Page / Macros / Introspection / BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF

BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF

Synopsis

#define BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(trait, name, default_) \
    unspecified token sequence \
/**/

Description

Расширяется в определение булевой унарМетафункцияХарактеристикаДля любого типаxчерта::==Правдаесли и только еслихявляется классным типом и имеет вложенный тип мембераx:: Имя.

На неполноценных компиляторах, не являющихся капабалой выполнения детектирования,trait::valueвсегда возвращает значение запасаdefault_. Макро-булевая конфигурация,BOOST_MPL_CFG_NO_HAS_XXX, предоставляется для сигнализации или переопределения состояния конкретного компилятора. [править]Примечание:Значение запаса также может быть предоставлено в точке вызова метафункции; см. разделСемантика экспрессиидля деталей —конец примечания.

Parameters

Parameter Requirement Description
черта Юридический идентификатор Token Название создаваемой метафункции.
Имя Юридический идентификатор Token Имя члена обнаружено.
default_ Булева постоянная Значение резервного копирования для неполноценных компиляторов.

Expression semantics

Для любых легальных идентификаторов C++чертаиимя, булево постоянное выражениеc1, булевоИнтегральная постояннаяc2и произвольный типx:

BOOST_MPL_HAS_XXX_TRAIT_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;
Return type:Integral Constant.
Semantics:If BOOST_MPL_CFG_NO_HAS_XXX is defined, r::value == c1; otherwise, r::value == true if and only if x is a class type that has a nested type memeber x::name.
typedef trait< x,c2 >::type r;
Return type:

Integral Constant.

Semantics:

If BOOST_MPL_CFG_NO_HAS_XXX is defined, r::value == c2::value; otherwise, equivalent to

typedef trait<x>::type r;

Example

BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(has_xxx, xxx, false)
struct test1 {};
struct test2 { void xxx(); };
struct test3 { int xxx; };
struct test4 { static int xxx(); };
struct test5 { template< typename T > struct xxx {}; };
struct test6 { typedef int xxx; };
struct test7 { struct xxx; };
struct test8 { typedef void (*xxx)(); };
struct test9 { typedef void (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> ));
#if !defined(BOOST_MPL_CFG_NO_HAS_XXX)
BOOST_MPL_ASSERT(( has_xxx<test6> ));
BOOST_MPL_ASSERT(( has_xxx<test7> ));
BOOST_MPL_ASSERT(( has_xxx<test8> ));
BOOST_MPL_ASSERT(( has_xxx<test9> ));
#endif
BOOST_MPL_ASSERT(( has_xxx<test6,true_> ));
BOOST_MPL_ASSERT(( has_xxx<test7,true_> ));
BOOST_MPL_ASSERT(( has_xxx<test8,true_> ));
BOOST_MPL_ASSERT(( has_xxx<test9,true_> ));

Статья The MPL Reference Manual: BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF раздела может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 20:33:28/0.0084948539733887/1