diff --git a/doc/TTIHistory.qbk b/doc/TTIHistory.qbk index 401ee87..4b2b285 100644 --- a/doc/TTIHistory.qbk +++ b/doc/TTIHistory.qbk @@ -1,5 +1,10 @@ [section:tti_history History] +[heading Version 1.2] + +* Added the set of metafunction class macros for passing the macro metafunctions as metadata. + This complements passing the macro metafunctions as metadata using placeholder expressions. + [heading Version 1.1] * Library now also compiles with gcc 3.4.2 and gcc 3.4.5. diff --git a/doc/TTIIntroduction.qbk b/doc/TTIIntroduction.qbk index 077be1b..c8894a2 100644 --- a/doc/TTIIntroduction.qbk +++ b/doc/TTIIntroduction.qbk @@ -1,6 +1,6 @@ [section:tti_intro Introduction] -Welcome to the Type Traits Introspection library version 1.1 . +Welcome to the Type Traits Introspection library version 1.2 . The Type Traits Introspection library, or TTI for short, is a library of macros generating metafunctions, and a set of parallel nullary type @@ -39,6 +39,11 @@ The functionality of the library may be summed up as: when specifying function and data syntax rather than a composite type. These metafunctions are called 'nullary type metafunctions' in the documentation. +* Provide a set of macros for all of the macro metafunctions + which create metafunction classes, so the metafunctions + generated by the macro metafunctions can be passed as metadata. + These can be used by the nullary type metafunctions, and may + find other uses for the template metaprogrammer. The library is a header only library. diff --git a/doc/TTIMetaClasses.qbk b/doc/TTIMetaClasses.qbk new file mode 100644 index 0000000..d743ac9 --- /dev/null +++ b/doc/TTIMetaClasses.qbk @@ -0,0 +1,139 @@ +[section:tti_metaclasses Macro Metafunctions as Metadata] + +As specified in the Boost MPL library, there are two ways to pass metafunctions +as metadata, and both ways fall under the Boost MPL terminology of 'lambda expressions': + +* As a metafunction class +* As a placeholder expression + +Using a placeholder expression is the easiest way and does not require the programmer to create +a metafunction class for passing the metadata. The syntax for this is fairly simple. The syntax +for passing a macro metafunction becomes 'macrometafunction<\_>' etc. depending +on how many parameters are bring passed. Thus for two parameters we would have +'macrometafunction<\_,\_>' etc., with another placeholder ('\_') added for each subsequent parameter. + +However using a placeholder expression may not be the fastest way when considering compile-time +speed. Because of this the TTI library provides a set of macros for each of the macro metafunctions +which generate a corresponding metafunction class. We will call this set of macros +the 'metafunction class macros'. + +These macros take exactly the same macro parameters as their corresponding +macro metafunctions. They generate a corresponding metafunction class rather +than a metafunction itself, which allows us to pass our macro metafunctions +as metadata, just as using placeholder expressions allows us to do. + +For these metafunction class macros there is a simple form and a complex form name +just as there is for the macro metafunctions. For each macro metafunction, +the name for the corresponding metafunction class macro is the macro +metafunction name with the sequence 'MTFC\_' ( for "MeTaFunction Class" ) +following the TTI\_ ( or TTI\_VM\_ ) portion of the macro metafunction name. +The subsequent metafunction class name, using the simple form, is the same name as +the corresponding macro metafunction name but with 'mtfc\_' prepended to the name. + +As with the complex form name of the macro metafunctions, +the complex form name of the corresponding metafunction class macros is +completely determined by the first 'trait' parameter. + +In the following table I do not specify the macro parameters +as they are exactly the same as those for their corresponding macro +metafunction: + +[table:tbmetaclasses TTI Metafunction Classes + [ + [Macro Metafunction] + [Metafunction Class Macro] + [Metafunction Class Name] + ] + [ + [[macroref TTI_HAS_TYPE]] + [[macroref TTI_MTFC_HAS_TYPE]] + [tti::mtfc\_has\_type\_'name'] + ] + [ + [[macroref TTI_TRAIT_HAS_TYPE]] + [[macroref TTI_MTFC_TRAIT_HAS_TYPE]] + [tti::'trait'] + ] + [ + [[macroref TTI_HAS_TEMPLATE]] + [[macroref TTI_MTFC_HAS_TEMPLATE]] + [tti::mtfc\_has\_template\_'name'] + ] + [ + [[macroref TTI_TRAIT_HAS_TEMPLATE]] + [[macroref TTI_MTFC_TRAIT_HAS_TEMPLATE]] + [tti::'trait'] + ] + [ + [[macroref TTI_HAS_TEMPLATE_CHECK_PARAMS]] + [[macroref TTI_MTFC_HAS_TEMPLATE_CHECK_PARAMS]] + [tti::mtfc\_has\_template\_check\_params\_'name'] + ] + [ + [[macroref TTI_TRAIT_HAS_TEMPLATE_CHECK_PARAMS]] + [[macroref TTI_MTFC_TRAIT_HAS_TEMPLATE_CHECK_PARAMS]] + [tti::'trait'] + ] + [ + [[macroref TTI_VM_HAS_TEMPLATE_CHECK_PARAMS]] + [[macroref TTI_VM_MTFC_HAS_TEMPLATE_CHECK_PARAMS]] + [tti::mtfc\_has\_template\_check\_params\_'name'] + ] + [ + [[macroref TTI_VM_TRAIT_HAS_TEMPLATE_CHECK_PARAMS]] + [[macroref TTI_VM_MTFC_TRAIT_HAS_TEMPLATE_CHECK_PARAMS]] + [tti::'trait'] + ] + [ + [[macroref TTI_HAS_MEMBER]] + [[macroref TTI_MTFC_HAS_MEMBER]] + [tti::mtfc\_has\_member\_'name'] + ] + [ + [[macroref TTI_TRAIT_HAS_MEMBER]] + [[macroref TTI_MTFC_TRAIT_HAS_MEMBER]] + [tti::'trait'] + ] + [ + [[macroref TTI_HAS_MEMBER_DATA]] + [[macroref TTI_MTFC_HAS_MEMBER_DATA]] + [tti::mtfc\_has\_member\_data\_'name'] + ] + [ + [[macroref TTI_TRAIT_HAS_MEMBER_DATA]] + [[macroref TTI_MTFC_TRAIT_HAS_MEMBER_DATA]] + [tti::'trait'] + ] + [ + [[macroref TTI_HAS_MEMBER_FUNCTION]] + [[macroref TTI_MTFC_HAS_MEMBER_FUNCTION]] + [tti::mtfc\_has\_member\_function\_'name'] + ] + [ + [[macroref TTI_TRAIT_HAS_MEMBER_FUNCTION]] + [[macroref TTI_MTFC_TRAIT_HAS_MEMBER_FUNCTION]] + [tti::'trait'] + ] + [ + [[macroref TTI_HAS_STATIC_MEMBER]] + [[macroref TTI_MTFC_HAS_STATIC_MEMBER]] + [tti::has\_static\_member\_'name'] + ] + [ + [[macroref TTI_TRAIT_HAS_STATIC_MEMBER]] + [[macroref TTI_MTFC_TRAIT_HAS_STATIC_MEMBER]] + [tti::'trait'] + ] + [ + [[macroref TTI_HAS_STATIC_MEMBER_FUNCTION]] + [[macroref TTI_MTFC_HAS_STATIC_MEMBER_FUNCTION]] + [tti::has\_static\_member\_function\_'name'] + ] + [ + [[macroref TTI_TRAIT_HAS_STATIC_MEMBER_FUNCTION]] + [[macroref TTI_MTFC_TRAIT_HAS_STATIC_MEMBER_FUNCTION]] + [tti::'trait'] + ] +] + +[endsect] diff --git a/doc/TTIMetafunctions.qbk b/doc/TTIMetafunctions.qbk index 8d90767..41df866 100644 --- a/doc/TTIMetafunctions.qbk +++ b/doc/TTIMetafunctions.qbk @@ -1,30 +1,41 @@ [section:tti_metafunctions Nullary Type Metafunctions] -The nullary type metafunctions parallel most of the macro metafunctions but more easily allow -a syntax where nested types can be specified without needing to manually reach into the 'type' -member of TTI\_MEMBER\_TYPE or its nullary type metafunction equivalent of tti::mf\_member\_type. +The macro metafunctions provide a complete set of functionality for +anything one would like to do using the TTI library. Why then do we +have another set of parallel functionality as nullary type metafunctions ? + +The nullary type metafunctions parallel those macro metafunctions in which types are specified +individually rather than in a composite manner. The individual types are passed to the nullary +type metafunctions as nullary metafunctions, hence the name of this group of metafunctions. +They more easily allow a syntax where nested types can be specified without needing to manually +reach into the 'type' member of TTI\_MEMBER\_TYPE or the 'type' member of its nullary type +metafunction equivalent called tti::mf\_member\_type. + In a very real way the nullary type metafunctions exist just to provide syntactic improvements over the macro metafunctions and are not needed to use the library, since all of the library functionality is already provided with the macro metafunctions. Nonetheless syntactic ease of use is a very real goal of the TTI library and therefore these metafunctions are provided to allow that syntactic improvement. -For each of these nullary type metafunctions the first parameter is a Boost MPL lambda expression -using its corresponding the macro metafunction to pass metafunctions as data. The easiest way to -do this is to use a Boost MPL placeholder expression. The syntax for passing the corresponding -macro metafunction becomes 'macrometafunction<_>' etc. depending on how many parameters are bring passed. -Thus for two parameters we would have 'macrometafunction<_,_>' etc., with another placeholder ('_') added -for each subsequent parameter. +The nullary type metafunctions reuse the metafunctions generated by the macro metafunctions. +To do this the result of a corresponding macro metafunction needs to be passed as metadata to a given +nullary metafunction. + +A lambda expression, in the form of a metafunction class or a placeholder expression, is passed as the +first parameter to our nullary type metafunctions. We have already seen how the TTI library supplies +metafunction classes through the use of metafunction class macros for each of the macro metafunctions. +The end-user can use these metafunction classes directly, or can use placeholder expressions with the +metafunctions generated by the macro metafunctions. -The remaining parameter are 'types'. These 'types' always consist first of the enclosing type and then +The remaining parameters are 'types'. These 'types' always consist first of the enclosing type and then possibly other types which make up the signature of whatever inner element we are introspecting. Each of these 'types' is passed as a nullary metafunction whose typedef 'type' is the actual type. The only exception to this use of nullary type metafunctions when specifying 'types' is when a Boost function_types tag type, which is optional, is specified as an addition to the function signature. -Also when dealing with a function signature and parameter types are being passed, while the +Also when dealing with a function signature and parameter types being passed, while the parameter 'types' themselves are in the form of nullary metafunctions, the MPL forward sequence -which contains the parameter 'types' should not be wrapped as a nullary metafunction. +which contains the parameter 'types' is a plain type and should not be wrapped as a nullary metafunction. For a type which is in scope, we can always use boost::mpl::identity to create our nullary metafunction, and there can never be a compiler error for diff --git a/doc/TTINestedType.qbk b/doc/TTINestedType.qbk index 38032b6..280454b 100644 --- a/doc/TTINestedType.qbk +++ b/doc/TTINestedType.qbk @@ -188,7 +188,6 @@ are called 'nullary type metafunctions'. In this group there is also a nullary m paralleling our TTI\_MEMBER\_TYPE macro metafunction, and therefore a further construct making the specifying of nested types easy and error-free to use. -This group of nullary type metafunctions will be -fully explained later after we give some examples of macro metafunction use. +This group of nullary type metafunctions will be fully explained later. [endsect] diff --git a/doc/TTIUsingNTM.qbk b/doc/TTIUsingNTM.qbk index c838751..c8443ee 100644 --- a/doc/TTIUsingNTM.qbk +++ b/doc/TTIUsingNTM.qbk @@ -85,6 +85,11 @@ Now let us create and invoke the nested metafunctions for each of our inner elem to see if type T above corresponds to our hypothetical type above. Imagine this being within 'OurTemplateClass' above. In the examples below the same macro is invoked just once to avoid ODR violations. + +I will also be mixing the way the macro metafunction metadata is passed to our +nullary type metafunctions, whether as a metafunction class or as a placeholder +expression. Both will work just fine since our nullary type metafunctions work +with any lambda expression as the first template parameter. [heading Member type] @@ -94,7 +99,7 @@ will produce a compiler error even if our structure does not correspond to T's reality. This also illustrates using 'tti::mf_member_type'. TTI_MEMBER_TYPE(BType) - TTI_MEMBER_TYPE(CType) + TTI_MTFC_MEMBER_TYPE(CType) TTI_MEMBER_TYPE(DType) typedef @@ -108,7 +113,7 @@ to T's reality. This also illustrates using 'tti::mf_member_type'. typedef tti::mf_member_type < - tti::member_type_CType<_>, + tti::mtfc_member_type_CType, BTypeNM > CTypeNM; @@ -148,11 +153,11 @@ metafunction to the same effect: Does T have a nested typedef called 'ADoubleType' within 'BType::CType::DType' whose type is a 'double' ? - TTI_HAS_TYPE(ADoubleType) + TTI_MTFC_HAS_TYPE(ADoubleType) tti::mf_has_type < - tti::has_type_ADoubleType<_,_>, + tti::mtfc_has_type_ADoubleType, DTypeNM, boost::mpl::identity > @@ -162,11 +167,11 @@ within 'BType::CType::DType' whose type is a 'double' ? Does T have a nested class template called 'AMemberTemplate' within 'BType::CType' whose template parameters are all types ('class' or 'typename') ? - TTI_HAS_TEMPLATE(AMemberTemplate) + TTI_MTFC_HAS_TEMPLATE(AMemberTemplate) tti::mf_has_template < - tti::has_template_AMemberTemplate<_>, + tti::mtfc_has_template_AMemberTemplate, CTypeNM > @@ -191,11 +196,11 @@ within 'BType::CType' whose template parameters are specified exactly ? [note Include the 'TTIntrospectionVM.hpp' header file when using this macro.] - TTI_VM_HAS_TEMPLATE_CHECK_PARAMS(MoreParameters,class,class,int,short,class,template class InnerTemplate,class) + TTI_VM_MTFC_HAS_TEMPLATE_CHECK_PARAMS(MoreParameters,class,class,int,short,class,template class InnerTemplate,class) tti::mf_has_template_check_params < - tti::has_template_check_params_MoreParameters<_>, + tti::mtfc_has_template_check_params_MoreParameters, CTypeNM > @@ -203,11 +208,11 @@ when using this macro.] Does T have a member data called 'IntBT' whose type is 'BType' ? - TTI_HAS_MEMBER_DATA(IntBT) + TTI_MTFC_HAS_MEMBER_DATA(IntBT) tti::mf_has_member_data < - tti::has_member_data_IntBT<_,_>, + tti::mtfc_has_member_data_IntBT, boost::mpl::identity, BTypeNM > @@ -233,11 +238,11 @@ within 'BType::CType::DType' whose type is 'int (short) const' ? Does T have a static member data called 'DSMember' within 'BType::CType::DType' whose type is 'short' ? - TTI_HAS_STATIC_MEMBER(DSMember) + TTI_MTFC_HAS_STATIC_MEMBER(DSMember) tti::mf_has_static_data < - tti::has_static_member_DSMember<_,_>, + tti::mtfc_has_static_member_DSMember, DTypeNM, boost::mpl::identity > diff --git a/doc/TypeTraitsIntrospection.pdf b/doc/TypeTraitsIntrospection.pdf index 194a9ea..a798119 100644 Binary files a/doc/TypeTraitsIntrospection.pdf and b/doc/TypeTraitsIntrospection.pdf differ diff --git a/doc/TypeTraitsIntrospection.qbk b/doc/TypeTraitsIntrospection.qbk index 7a7ff44..17b5b2f 100644 --- a/doc/TypeTraitsIntrospection.qbk +++ b/doc/TypeTraitsIntrospection.qbk @@ -17,6 +17,7 @@ [include TTIDetail.qbk] [include TTINestedType.qbk] [include TTIUsingMM.qbk] +[include TTIMetaClasses.qbk] [include TTIMetafunctions.qbk] [include TTIUsingNTM.qbk] [include TTIReference.qbk] diff --git a/doc/html/TTI_HAS_MEMBER.html b/doc/html/TTI_HAS_MEMBER.html index 946895e..0fcf8b9 100644 --- a/doc/html/TTI_HAS_MEMBER.html +++ b/doc/html/TTI_HAS_MEMBER.html @@ -6,14 +6,14 @@ - - + +

-PrevUpHomeNext +PrevUpHomeNext
@@ -26,7 +26,7 @@ TTI_HAS_MEMBER(name)
-

Description

+

Description

name = the name of the inner member.

returns = a metafunction called "tti::has_member_name" where 'name' is the macro parameter.

The metafunction types and return:

@@ -40,7 +40,7 @@
-PrevUpHomeNext +PrevUpHomeNext
diff --git a/doc/html/TTI_HAS_MEMBER_DATA.html b/doc/html/TTI_HAS_MEMBER_DATA.html index 5031077..0e9befb 100644 --- a/doc/html/TTI_HAS_MEMBER_DATA.html +++ b/doc/html/TTI_HAS_MEMBER_DATA.html @@ -6,14 +6,14 @@ - - + +

-PrevUpHomeNext +PrevUpHomeNext
@@ -26,7 +26,7 @@ TTI_HAS_MEMBER_DATA(name)
-

Description

+

Description

name = the name of the inner member.

returns = a metafunction called "tti::has_member_data_name" where 'name' is the macro parameter.

The metafunction types and return:

@@ -41,7 +41,7 @@
-PrevUpHomeNext +PrevUpHomeNext
diff --git a/doc/html/TTI_HAS_MEMBER_FUNCTION.html b/doc/html/TTI_HAS_MEMBER_FUNCTION.html index 46e6507..5150199 100644 --- a/doc/html/TTI_HAS_MEMBER_FUNCTION.html +++ b/doc/html/TTI_HAS_MEMBER_FUNCTION.html @@ -6,14 +6,14 @@ - - + +

-PrevUpHomeNext +PrevUpHomeNext
@@ -26,7 +26,7 @@ TTI_HAS_MEMBER_FUNCTION(name)
-

Description

+

Description

name = the name of the inner member.

returns = a metafunction called "tti::has_member_function_name" where 'name' is the macro parameter.

The metafunction types and return:

@@ -43,7 +43,7 @@
-PrevUpHomeNext +PrevUpHomeNext
diff --git a/doc/html/TTI_HAS_STATIC_MEMBER.html b/doc/html/TTI_HAS_STATIC_MEMBER.html index d60735d..954dec3 100644 --- a/doc/html/TTI_HAS_STATIC_MEMBER.html +++ b/doc/html/TTI_HAS_STATIC_MEMBER.html @@ -6,14 +6,14 @@ - - + +

-PrevUpHomeNext +PrevUpHomeNext
@@ -26,7 +26,7 @@ TTI_HAS_STATIC_MEMBER(name)
-

Description

+

Description

name = the name of the inner member.

returns = a metafunction called "tti::has_static_member_name" where 'name' is the macro parameter.

@@ -42,7 +42,7 @@
-PrevUpHomeNext +PrevUpHomeNext
diff --git a/doc/html/TTI_HAS_STATIC_MEMBER_FUNCTION.html b/doc/html/TTI_HAS_STATIC_MEMBER_FUNCTION.html index acf4d37..6383aa4 100644 --- a/doc/html/TTI_HAS_STATIC_MEMBER_FUNCTION.html +++ b/doc/html/TTI_HAS_STATIC_MEMBER_FUNCTION.html @@ -6,14 +6,14 @@ - - + +

-PrevUpHomeNext +PrevUpHomeNext
@@ -26,7 +26,7 @@ TTI_HAS_STATIC_MEMBER_FUNCTION(name)
-

Description

+

Description

name = the name of the inner member.

returns = a metafunction called "tti::has_static_member_function_name" where 'name' is the macro parameter.

The metafunction types and return:

@@ -43,7 +43,7 @@
-PrevUpHomeNext +PrevUpHomeNext
diff --git a/doc/html/TTI_HAS_TEMPLATE.html b/doc/html/TTI_HAS_TEMPLATE.html index 4b3c4ad..d221da9 100644 --- a/doc/html/TTI_HAS_TEMPLATE.html +++ b/doc/html/TTI_HAS_TEMPLATE.html @@ -6,14 +6,14 @@ - - + +

-PrevUpHomeNext +PrevUpHomeNext
@@ -26,7 +26,7 @@ TTI_HAS_TEMPLATE(name)
-

Description

+

Description

name = the name of the inner template.

returns = a metafunction called "tti::has_template_name" where 'name' is the macro parameter.

The metafunction types and return:

@@ -41,7 +41,7 @@
-PrevUpHomeNext +PrevUpHomeNext
diff --git a/doc/html/TTI_HAS_TEMPLATE_CHECK_PARAMS.html b/doc/html/TTI_HAS_TEMPLATE_CHECK_PARAMS.html index 155e3af..05c413e 100644 --- a/doc/html/TTI_HAS_TEMPLATE_CHECK_PARAMS.html +++ b/doc/html/TTI_HAS_TEMPLATE_CHECK_PARAMS.html @@ -6,14 +6,14 @@ - - + +

-PrevUpHomeNext +PrevUpHomeNext
@@ -26,7 +26,7 @@ TTI_HAS_TEMPLATE_CHECK_PARAMS(name, tpSeq)
-

Description

+

Description

name = the name of the inner class template.
tpSeq = a Boost PP sequence which has the class template parameters. Each part of the template parameters separated by a comma ( , ) is put in a separate sequence element.

returns = a metafunction called "tti::has_template_check_params_name" where 'name' is the macro parameter.

@@ -41,7 +41,7 @@
-PrevUpHomeNext +PrevUpHomeNext
diff --git a/doc/html/TTI_HAS_TYPE.html b/doc/html/TTI_HAS_TYPE.html index 3d6fcdb..33f6a9c 100644 --- a/doc/html/TTI_HAS_TYPE.html +++ b/doc/html/TTI_HAS_TYPE.html @@ -6,14 +6,14 @@ - - + +

-PrevUpHomeNext +PrevUpHomeNext
@@ -26,7 +26,7 @@ TTI_HAS_TYPE(name)
-

Description

+

Description

name = the name of the inner type.

returns = a metafunction called "tti::has_type_name" where 'name' is the macro parameter.

The metafunction types and return:

@@ -41,7 +41,7 @@
-PrevUpHomeNext +PrevUpHomeNext
diff --git a/doc/html/TTI_MEMBER_TYPE.html b/doc/html/TTI_MEMBER_TYPE.html index 5fab19d..c617941 100644 --- a/doc/html/TTI_MEMBER_TYPE.html +++ b/doc/html/TTI_MEMBER_TYPE.html @@ -6,14 +6,14 @@ - - + +

-PrevUpHomeNext +PrevUpHomeNext
@@ -26,7 +26,7 @@ TTI_MEMBER_TYPE(name)
-

Description

+

Description

name = the name of the inner type.

returns = a metafunction called "tti::member_type_name" where 'name' is the macro parameter.

The metafunction types and return:

@@ -42,7 +42,7 @@
-PrevUpHomeNext +PrevUpHomeNext
diff --git a/doc/html/TTI_MTFC_HAS_MEMBER.html b/doc/html/TTI_MTFC_HAS_MEMBER.html new file mode 100644 index 0000000..90687ca --- /dev/null +++ b/doc/html/TTI_MTFC_HAS_MEMBER.html @@ -0,0 +1,46 @@ + + + +Macro TTI_MTFC_HAS_MEMBER + + + + + + + + +
+
+
+PrevUpHomeNext +
+
+
+
+

Macro TTI_MTFC_HAS_MEMBER

+

TTI_MTFC_HAS_MEMBER — Expands to a metafunction class which tests whether a member data or member function with a particular name and type exists.

+
+

Synopsis

+
// In header: <boost/tti/TTIntrospection.hpp>
+
+TTI_MTFC_HAS_MEMBER(name)
+
+

Description

+

name = the name of the inner member.

+

returns = a metafunction class called "tti::mtfc_has_member_name" where 'name' is the macro parameter.

+

The metafunction class's 'apply' metafunction types and return:

+

T = the type, in the form of a member data pointer or member function pointer, in which to look for our 'name'.
+ returns = 'value' is true if the 'name' exists, with the appropriate type, otherwise 'value' is false.

+
+
+ + + +
+
+
+PrevUpHomeNext +
+ + diff --git a/doc/html/TTI_MTFC_HAS_MEMBER_DATA.html b/doc/html/TTI_MTFC_HAS_MEMBER_DATA.html new file mode 100644 index 0000000..6e67b5c --- /dev/null +++ b/doc/html/TTI_MTFC_HAS_MEMBER_DATA.html @@ -0,0 +1,47 @@ + + + +Macro TTI_MTFC_HAS_MEMBER_DATA + + + + + + + + +
+
+
+PrevUpHomeNext +
+
+
+
+

Macro TTI_MTFC_HAS_MEMBER_DATA

+

TTI_MTFC_HAS_MEMBER_DATA — Expands to a metafunction class which tests whether a member data with a particular name and type exists.

+
+

Synopsis

+
// In header: <boost/tti/TTIntrospection.hpp>
+
+TTI_MTFC_HAS_MEMBER_DATA(name)
+
+

Description

+

name = the name of the inner member.

+

returns = a metafunction class called "tti::mtfc_has_member_data_name" where 'name' is the macro parameter.

+

The metafunction class's 'apply' metafunction types and return:

+

T = the enclosing type in which to look for our 'name'.
+ R = the type of the member data.
+ returns = 'value' is true if the 'name' exists, with the appropriate type, otherwise 'value' is false.

+
+
+ + + +
+
+
+PrevUpHomeNext +
+ + diff --git a/doc/html/TTI_MTFC_HAS_MEMBER_FUNCTION.html b/doc/html/TTI_MTFC_HAS_MEMBER_FUNCTION.html new file mode 100644 index 0000000..82cda68 --- /dev/null +++ b/doc/html/TTI_MTFC_HAS_MEMBER_FUNCTION.html @@ -0,0 +1,49 @@ + + + +Macro TTI_MTFC_HAS_MEMBER_FUNCTION + + + + + + + + +
+
+
+PrevUpHomeNext +
+
+
+
+

Macro TTI_MTFC_HAS_MEMBER_FUNCTION

+

TTI_MTFC_HAS_MEMBER_FUNCTION — Expands to a metafunction class which tests whether a member function with a particular name and signature exists.

+
+

Synopsis

+
// In header: <boost/tti/TTIntrospection.hpp>
+
+TTI_MTFC_HAS_MEMBER_FUNCTION(name)
+
+

Description

+

name = the name of the inner member.

+

returns = a metafunction class called "tti::mtfc_has_member_function_name" where 'name' is the macro parameter.

+

The metafunction class's 'apply' metafunction types and return:

+

T = the enclosing type in which to look for our 'name'.
+ R = the return type of the member function.
+ FS = an optional parameter which are the parameters of the member function as a boost::mpl forward sequence.
+ TAG = an optional parameter which is a boost::function_types tag to apply to the member function.
+ returns = 'value' is true if the 'name' exists, with the appropriate type, otherwise 'value' is false.

+
+
+ + + +
+
+
+PrevUpHomeNext +
+ + diff --git a/doc/html/TTI_MTFC_HAS_STATIC_MEMBER.html b/doc/html/TTI_MTFC_HAS_STATIC_MEMBER.html new file mode 100644 index 0000000..489bcde --- /dev/null +++ b/doc/html/TTI_MTFC_HAS_STATIC_MEMBER.html @@ -0,0 +1,48 @@ + + + +Macro TTI_MTFC_HAS_STATIC_MEMBER + + + + + + + + +
+
+
+PrevUpHomeNext +
+
+
+
+

Macro TTI_MTFC_HAS_STATIC_MEMBER

+

TTI_MTFC_HAS_STATIC_MEMBER — Expands to a metafunction class which tests whether a static member data or a static member function with a particular name and type exists.

+
+

Synopsis

+
// In header: <boost/tti/TTIntrospection.hpp>
+
+TTI_MTFC_HAS_STATIC_MEMBER(name)
+
+

Description

+

name = the name of the inner member.

+

returns = a metafunction class called "tti::mtfc_has_static_member_name" where 'name' is the macro parameter.
+

+

The metafunction class's 'apply' metafunction types and return:

+

T = the enclosing type.
+ Type = the static member data or static member function type, in the form of a data or function type, in which to look for our 'name'.
+ returns = 'value' is true if the 'name' exists within the enclosing type, with the appropriate type, otherwise 'value' is false.

+
+
+ + + +
+
+
+PrevUpHomeNext +
+ + diff --git a/doc/html/TTI_MTFC_HAS_STATIC_MEMBER_FUNCTION.html b/doc/html/TTI_MTFC_HAS_STATIC_MEMBER_FUNCTION.html new file mode 100644 index 0000000..7569b31 --- /dev/null +++ b/doc/html/TTI_MTFC_HAS_STATIC_MEMBER_FUNCTION.html @@ -0,0 +1,49 @@ + + + +Macro TTI_MTFC_HAS_STATIC_MEMBER_FUNCTION + + + + + + + + +
+
+
+PrevUpHomeNext +
+
+
+
+

Macro TTI_MTFC_HAS_STATIC_MEMBER_FUNCTION

+

TTI_MTFC_HAS_STATIC_MEMBER_FUNCTION — Expands to a metafunction class which tests whether a static member function with a particular name and signature exists.

+
+

Synopsis

+
// In header: <boost/tti/TTIntrospection.hpp>
+
+TTI_MTFC_HAS_STATIC_MEMBER_FUNCTION(name)
+
+

Description

+

name = the name of the inner member.

+

returns = a metafunction class called "tti::mtfc_has_static_member_function_name" where 'name' is the macro parameter.

+

The metafunction class's 'apply' metafunction types and return:

+

T = the enclosing type in which to look for our 'name'.
+ R = the return type of the static member function.
+ FS = an optional parameter which are the parameters of the static member function as a boost::mpl forward sequence.
+ TAG = an optional parameter which is a boost::function_types tag to apply to the static member function.
+ returns = 'value' is true if the 'name' exists, with the appropriate type, otherwise 'value' is false.

+
+
+ + + +
+
+
+PrevUpHomeNext +
+ + diff --git a/doc/html/TTI_MTFC_HAS_TEMPLATE.html b/doc/html/TTI_MTFC_HAS_TEMPLATE.html new file mode 100644 index 0000000..a8ee288 --- /dev/null +++ b/doc/html/TTI_MTFC_HAS_TEMPLATE.html @@ -0,0 +1,47 @@ + + + +Macro TTI_MTFC_HAS_TEMPLATE + + + + + + + + +
+
+
+PrevUpHomeNext +
+
+
+
+

Macro TTI_MTFC_HAS_TEMPLATE

+

TTI_MTFC_HAS_TEMPLATE — Expands to a metafunction class which tests whether an inner class template with a particular name exists.

+
+

Synopsis

+
// In header: <boost/tti/TTIntrospection.hpp>
+
+TTI_MTFC_HAS_TEMPLATE(name)
+
+

Description

+

name = the name of the inner template.

+

returns = a metafunction class called "tti::mtfc_has_template_name" where 'name' is the macro parameter.

+

The metafunction class's 'apply' metafunction types and return:

+

T = the enclosing type in which to look for our 'name'.
+ returns = 'value' is true if the 'name' template exists within the enclosing type, otherwise 'value' is false.

+

The template must have all 'class' ( or 'typename' ) parameters types.

+
+
+ + + +
+
+
+PrevUpHomeNext +
+ + diff --git a/doc/html/TTI_MTFC_HAS_TEMPLATE_CHECK_PARAMS.html b/doc/html/TTI_MTFC_HAS_TEMPLATE_CHECK_PARAMS.html new file mode 100644 index 0000000..811b182 --- /dev/null +++ b/doc/html/TTI_MTFC_HAS_TEMPLATE_CHECK_PARAMS.html @@ -0,0 +1,47 @@ + + + +Macro TTI_MTFC_HAS_TEMPLATE_CHECK_PARAMS + + + + + + + + +
+
+
+PrevUpHomeNext +
+
+
+
+

Macro TTI_MTFC_HAS_TEMPLATE_CHECK_PARAMS

+

TTI_MTFC_HAS_TEMPLATE_CHECK_PARAMS — Expands to a metafunction class which tests whether an inner class template with a particular name and signature exists.

+
+

Synopsis

+
// In header: <boost/tti/TTIntrospection.hpp>
+
+TTI_MTFC_HAS_TEMPLATE_CHECK_PARAMS(name, tpSeq)
+
+

Description

+

name = the name of the inner class template.
+ tpSeq = a Boost PP sequence which has the class template parameters. Each part of the template parameters separated by a comma ( , ) is put in a separate sequence element.

+

returns = a metafunction class called "tti::mtfc_has_template_check_params_name" where 'name' is the macro parameter.

+

The metafunction class's 'apply' metafunction types and return:

+

T = the enclosing type in which to look for our 'name'.
+ returns = 'value' is true if the 'name' class template with the signature as defined by the 'tpSeq' exists within the enclosing type, otherwise 'value' is false.

+
+
+ + + +
+
+
+PrevUpHomeNext +
+ + diff --git a/doc/html/TTI_MTFC_HAS_TYPE.html b/doc/html/TTI_MTFC_HAS_TYPE.html new file mode 100644 index 0000000..478b94c --- /dev/null +++ b/doc/html/TTI_MTFC_HAS_TYPE.html @@ -0,0 +1,47 @@ + + + +Macro TTI_MTFC_HAS_TYPE + + + + + + + + +
+
+
+PrevUpHomeNext +
+
+
+
+

Macro TTI_MTFC_HAS_TYPE

+

TTI_MTFC_HAS_TYPE — Expands to a metafunction class which tests whether an inner type with a particular name exists and optionally is a particular type.

+
+

Synopsis

+
// In header: <boost/tti/TTIntrospection.hpp>
+
+TTI_MTFC_HAS_TYPE(name)
+
+

Description

+

name = the name of the inner type.

+

returns = a metafunction class called "tti::mtfc_has_type_name" where 'name' is the macro parameter.

+

The metafunction class's 'apply' metafunction types and return:

+

T = the enclosing type in which to look for our 'name'.
+ U = the type of the inner type named 'name' as an optional parameter.
+ returns = 'value' is true if the 'name' type exists within the enclosing type and, if type U is specified, the 'name' type is the same as the type U, otherwise 'value' is false.

+
+
+ + + +
+
+
+PrevUpHomeNext +
+ + diff --git a/doc/html/TTI_MTFC_MEMBER_TYPE.html b/doc/html/TTI_MTFC_MEMBER_TYPE.html new file mode 100644 index 0000000..956e827 --- /dev/null +++ b/doc/html/TTI_MTFC_MEMBER_TYPE.html @@ -0,0 +1,48 @@ + + + +Macro TTI_MTFC_MEMBER_TYPE + + + + + + + + +
+
+
+PrevUpHomeNext +
+
+
+
+

Macro TTI_MTFC_MEMBER_TYPE

+

TTI_MTFC_MEMBER_TYPE — Expands to a metafunction class whose typedef 'type' is either the named type or an unspecified type.

+
+

Synopsis

+
// In header: <boost/tti/TTIntrospection.hpp>
+
+TTI_MTFC_MEMBER_TYPE(name)
+
+

Description

+

name = the name of the inner type.

+

returns = a metafunction class called "tti::mtfc_member_type_name" where 'name' is the macro parameter.

+

The metafunction class's 'apply' metafunction types and return:

+

T = the enclosing type.
+ returns = 'type' is the inner type of 'name' if the inner type exists within the enclosing type, else 'type' is an unspecified type.
+

+

The purpose of this macro is to encapsulate the 'name' type as the typedef 'type' of a metafunction class, but only if it exists within the enclosing type. This allows for a lazy evaluation of inner type existence which can be used by other metafunctions in this library.

+
+
+ + + +
+
+
+PrevUpHomeNext +
+ + diff --git a/doc/html/TTI_MTFC_TRAIT_HAS_MEMBER.html b/doc/html/TTI_MTFC_TRAIT_HAS_MEMBER.html new file mode 100644 index 0000000..747126b --- /dev/null +++ b/doc/html/TTI_MTFC_TRAIT_HAS_MEMBER.html @@ -0,0 +1,48 @@ + + + +Macro TTI_MTFC_TRAIT_HAS_MEMBER + + + + + + + + +
+
+
+PrevUpHomeNext +
+
+
+
+

Macro TTI_MTFC_TRAIT_HAS_MEMBER

+

TTI_MTFC_TRAIT_HAS_MEMBER — Expands to a metafunction class which tests whether a member data or member function with a particular name and type exists.

+
+

Synopsis

+
// In header: <boost/tti/TTIntrospection.hpp>
+
+TTI_MTFC_TRAIT_HAS_MEMBER(trait, name)
+
+

Description

+

trait = the name of the metafunction class within the tti namespace.
+ name = the name of the inner member.

+

returns = a metafunction class called "tti::trait" where 'trait' is the macro parameter.
+

+

The metafunction class's 'apply' metafunction types and return:

+

T = the type, in the form of a member data pointer or member function pointer, in which to look for our 'name'.
+ returns = 'value' is true if the 'name' exists, with the appropriate type, otherwise 'value' is false.

+
+
+ + + +
+
+
+PrevUpHomeNext +
+ + diff --git a/doc/html/TTI_MTFC_TRAIT_HAS_MEMBER_DATA.html b/doc/html/TTI_MTFC_TRAIT_HAS_MEMBER_DATA.html new file mode 100644 index 0000000..3a8e38d --- /dev/null +++ b/doc/html/TTI_MTFC_TRAIT_HAS_MEMBER_DATA.html @@ -0,0 +1,49 @@ + + + +Macro TTI_MTFC_TRAIT_HAS_MEMBER_DATA + + + + + + + + +
+
+
+PrevUpHomeNext +
+
+
+
+

Macro TTI_MTFC_TRAIT_HAS_MEMBER_DATA

+

TTI_MTFC_TRAIT_HAS_MEMBER_DATA — Expands to a metafunction class which tests whether a member data with a particular name and type exists.

+
+

Synopsis

+
// In header: <boost/tti/TTIntrospection.hpp>
+
+TTI_MTFC_TRAIT_HAS_MEMBER_DATA(trait, name)
+
+

Description

+

trait = the name of the metafunction class within the tti namespace.
+ name = the name of the inner member.

+

returns = a metafunction class called "tti::trait" where 'trait' is the macro parameter.
+

+

The metafunction class's 'apply' metafunction types and return:

+

T = the enclosing type in which to look for our 'name'.
+ R = the type of the member data.
+ returns = 'value' is true if the 'name' exists, with the appropriate type, otherwise 'value' is false.

+
+
+ + + +
+
+
+PrevUpHomeNext +
+ + diff --git a/doc/html/TTI_MTFC_TRAIT_HAS_MEMBER_FUNCTION.html b/doc/html/TTI_MTFC_TRAIT_HAS_MEMBER_FUNCTION.html new file mode 100644 index 0000000..c3fbf20 --- /dev/null +++ b/doc/html/TTI_MTFC_TRAIT_HAS_MEMBER_FUNCTION.html @@ -0,0 +1,51 @@ + + + +Macro TTI_MTFC_TRAIT_HAS_MEMBER_FUNCTION + + + + + + + + +
+
+
+PrevUpHomeNext +
+
+
+
+

Macro TTI_MTFC_TRAIT_HAS_MEMBER_FUNCTION

+

TTI_MTFC_TRAIT_HAS_MEMBER_FUNCTION — Expands to a metafunction class which tests whether a member function with a particular name and signature exists.

+
+

Synopsis

+
// In header: <boost/tti/TTIntrospection.hpp>
+
+TTI_MTFC_TRAIT_HAS_MEMBER_FUNCTION(trait, name)
+
+

Description

+

trait = the name of the metafunction class within the tti namespace.
+ name = the name of the inner member.

+

returns = a metafunction class called "tti::trait" where 'trait' is the macro parameter.
+

+

The metafunction class's 'apply' metafunction types and return:

+

T = the enclosing type in which to look for our 'name'.
+ R = the return type of the member function.
+ FS = an optional parameter which are the parameters of the member function as a boost::mpl forward sequence.
+ TAG = an optional parameter which is a boost::function_types tag to apply to the member function.
+ returns = 'value' is true if the 'name' exists, with the appropriate type, otherwise 'value' is false.

+
+
+ + + +
+
+
+PrevUpHomeNext +
+ + diff --git a/doc/html/TTI_MTFC_TRAIT_HAS_STATIC_MEMBER.html b/doc/html/TTI_MTFC_TRAIT_HAS_STATIC_MEMBER.html new file mode 100644 index 0000000..a1eab09 --- /dev/null +++ b/doc/html/TTI_MTFC_TRAIT_HAS_STATIC_MEMBER.html @@ -0,0 +1,49 @@ + + + +Macro TTI_MTFC_TRAIT_HAS_STATIC_MEMBER + + + + + + + + +
+
+
+PrevUpHomeNext +
+
+
+
+

Macro TTI_MTFC_TRAIT_HAS_STATIC_MEMBER

+

TTI_MTFC_TRAIT_HAS_STATIC_MEMBER — Expands to a metafunction class which tests whether a static member data or a static member function with a particular name and type exists.

+
+

Synopsis

+
// In header: <boost/tti/TTIntrospection.hpp>
+
+TTI_MTFC_TRAIT_HAS_STATIC_MEMBER(trait, name)
+
+

Description

+

trait = the name of the metafunction class within the tti namespace.
+ name = the name of the inner member.

+

returns = a metafunction class called "tti::trait" where 'trait' is the macro parameter.
+

+

The metafunction class's 'apply' metafunction types and return:

+

T = the enclosing type.
+ Type = the static member data or static member function type, in the form of a data or function type, in which to look for our 'name'.
+ returns = 'value' is true if the 'name' exists within the enclosing type, with the appropriate type, otherwise 'value' is false.

+
+
+ + + +
+
+
+PrevUpHomeNext +
+ + diff --git a/doc/html/TTI_MTFC_TRAIT_HAS_STATIC_MEMBER_FUNCTION.html b/doc/html/TTI_MTFC_TRAIT_HAS_STATIC_MEMBER_FUNCTION.html new file mode 100644 index 0000000..4d4a2dd --- /dev/null +++ b/doc/html/TTI_MTFC_TRAIT_HAS_STATIC_MEMBER_FUNCTION.html @@ -0,0 +1,51 @@ + + + +Macro TTI_MTFC_TRAIT_HAS_STATIC_MEMBER_FUNCTION + + + + + + + + +
+
+
+PrevUpHomeNext +
+
+
+
+

Macro TTI_MTFC_TRAIT_HAS_STATIC_MEMBER_FUNCTION

+

TTI_MTFC_TRAIT_HAS_STATIC_MEMBER_FUNCTION — Expands to a metafunction class which tests whether a static member function with a particular name and signature exists.

+
+

Synopsis

+
// In header: <boost/tti/TTIntrospection.hpp>
+
+TTI_MTFC_TRAIT_HAS_STATIC_MEMBER_FUNCTION(trait, name)
+
+

Description

+

trait = the name of the metafunction class within the tti namespace.
+ name = the name of the inner member.

+

returns = a metafunction class called "tti::trait" where 'trait' is the macro parameter.
+

+

The metafunction class's 'apply' metafunction types and return:

+

T = the enclosing type in which to look for our 'name'.
+ R = the return type of the static member function.
+ FS = an optional parameter which are the parameters of the static member function as a boost::mpl forward sequence.
+ TAG = an optional parameter which is a boost::function_types tag to apply to the static member function.
+ returns = 'value' is true if the 'name' exists, with the appropriate type, otherwise 'value' is false.

+
+
+ + + +
+
+
+PrevUpHomeNext +
+ + diff --git a/doc/html/TTI_MTFC_TRAIT_HAS_TEMPLATE.html b/doc/html/TTI_MTFC_TRAIT_HAS_TEMPLATE.html new file mode 100644 index 0000000..df0c6c9 --- /dev/null +++ b/doc/html/TTI_MTFC_TRAIT_HAS_TEMPLATE.html @@ -0,0 +1,48 @@ + + + +Macro TTI_MTFC_TRAIT_HAS_TEMPLATE + + + + + + + + +
+
+
+PrevUpHomeNext +
+
+
+
+

Macro TTI_MTFC_TRAIT_HAS_TEMPLATE

+

TTI_MTFC_TRAIT_HAS_TEMPLATE — Expands to a metafunction class which tests whether an inner class template with a particular name exists.

+
+

Synopsis

+
// In header: <boost/tti/TTIntrospection.hpp>
+
+TTI_MTFC_TRAIT_HAS_TEMPLATE(trait, name)
+
+

Description

+

trait = the name of the metafunction class within the tti namespace.
+ name = the name of the inner template.

+

returns = a metafunction class called "tti::trait" where 'trait' is the macro parameter.

+

The metafunction class's 'apply' metafunction types and return:

+

T = the enclosing type in which to look for our 'name'.
+ returns = 'value' is true if the 'name' template exists within the enclosing type, otherwise 'value' is false.

+

The template must have all 'class' ( or 'typename' ) parameters types.

+
+
+ + + +
+
+
+PrevUpHomeNext +
+ + diff --git a/doc/html/TTI_MTFC_TRAIT_HAS_TEMPLATE_CHECK_PARAMS.html b/doc/html/TTI_MTFC_TRAIT_HAS_TEMPLATE_CHECK_PARAMS.html new file mode 100644 index 0000000..cf4e416 --- /dev/null +++ b/doc/html/TTI_MTFC_TRAIT_HAS_TEMPLATE_CHECK_PARAMS.html @@ -0,0 +1,49 @@ + + + +Macro TTI_MTFC_TRAIT_HAS_TEMPLATE_CHECK_PARAMS + + + + + + + + +
+
+
+PrevUpHomeNext +
+
+
+
+

Macro TTI_MTFC_TRAIT_HAS_TEMPLATE_CHECK_PARAMS

+

TTI_MTFC_TRAIT_HAS_TEMPLATE_CHECK_PARAMS — Expands to a metafunction class which tests whether an inner class template with a particular name and signature exists.

+
+

Synopsis

+
// In header: <boost/tti/TTIntrospection.hpp>
+
+TTI_MTFC_TRAIT_HAS_TEMPLATE_CHECK_PARAMS(trait, name, tpSeq)
+
+

Description

+

trait = the name of the metafunction class within the tti namespace.
+ name = the name of the inner class template.
+ tpSeq = a Boost PP sequence which has the class template parameters. Each part of the template parameters separated by a comma ( , ) is put in a separate sequence element.
+

+

returns = a metafunction class called "tti::trait" where 'trait' is the macro parameter.

+

The metafunction class's 'apply' metafunction types and return:

+

T = the enclosing type in which to look for our 'name'.
+ returns = 'value' is true if the 'name' class template with the signature as defined by the 'tpSeq' exists within the enclosing type, otherwise 'value' is false.

+
+
+ + + +
+
+
+PrevUpHomeNext +
+ + diff --git a/doc/html/TTI_MTFC_TRAIT_HAS_TYPE.html b/doc/html/TTI_MTFC_TRAIT_HAS_TYPE.html new file mode 100644 index 0000000..09654a5 --- /dev/null +++ b/doc/html/TTI_MTFC_TRAIT_HAS_TYPE.html @@ -0,0 +1,48 @@ + + + +Macro TTI_MTFC_TRAIT_HAS_TYPE + + + + + + + + +
+
+
+PrevUpHomeNext +
+
+
+
+

Macro TTI_MTFC_TRAIT_HAS_TYPE

+

TTI_MTFC_TRAIT_HAS_TYPE — Expands to a metafunction class which tests whether an inner type with a particular name exists and optionally is a particular type.

+
+

Synopsis

+
// In header: <boost/tti/TTIntrospection.hpp>
+
+TTI_MTFC_TRAIT_HAS_TYPE(trait, name)
+
+

Description

+

trait = the name of the metafunction class within the tti namespace.
+ name = the name of the inner type.

+

returns = a metfunction class called "tti::trait" where 'trait' is the macro parameter.

+

The metafunction class's 'apply' metafunction types and return:

+

T = the enclosing type in which to look for our 'name'.
+ U = the type of the inner type named 'name' as an optional parameter.
+ returns = 'value' is true if the 'name' type exists within the enclosing type and, if type U is specified, the 'name' type is the same as the type U, otherwise 'value' is false.

+
+
+ + + +
+
+
+PrevUpHomeNext +
+ + diff --git a/doc/html/TTI_MTFC_TRAIT_MEMBER_TYPE.html b/doc/html/TTI_MTFC_TRAIT_MEMBER_TYPE.html new file mode 100644 index 0000000..daa3414 --- /dev/null +++ b/doc/html/TTI_MTFC_TRAIT_MEMBER_TYPE.html @@ -0,0 +1,49 @@ + + + +Macro TTI_MTFC_TRAIT_MEMBER_TYPE + + + + + + + + +
+
+
+PrevUpHomeNext +
+
+
+
+

Macro TTI_MTFC_TRAIT_MEMBER_TYPE

+

TTI_MTFC_TRAIT_MEMBER_TYPE — Expands to a metafunction class whose typedef 'type' is either the named type or an unspecified type.

+
+

Synopsis

+
// In header: <boost/tti/TTIntrospection.hpp>
+
+TTI_MTFC_TRAIT_MEMBER_TYPE(trait, name)
+
+

Description

+

trait = the name of the metafunction class within the tti namespace.
+ name = the name of the inner type.

+

returns = a metafunction class called "tti::trait" where 'trait' is the macro parameter.

+

The metafunction class's 'apply' metafunction types and return:

+

T = the enclosing type.
+ returns = 'type' is the inner type of 'name' if the inner type exists within the enclosing type, else 'type' is an unspecified type.
+

+

The purpose of this macro is to encapsulate the 'name' type as the typedef 'type' of a metafunction class, but only if it exists within the enclosing type. This allows for a lazy evaluation of inner type existence which can be used by other metafunctions in this library.

+
+
+ + + +
+
+
+PrevUpHomeNext +
+ + diff --git a/doc/html/TTI_TRAIT_HAS_MEMBER.html b/doc/html/TTI_TRAIT_HAS_MEMBER.html index f17a6f1..40dd60a 100644 --- a/doc/html/TTI_TRAIT_HAS_MEMBER.html +++ b/doc/html/TTI_TRAIT_HAS_MEMBER.html @@ -6,14 +6,14 @@ - - + +

-PrevUpHomeNext +PrevUpHomeNext
@@ -26,10 +26,11 @@ TTI_TRAIT_HAS_MEMBER(trait, name)
-

Description

+

Description

trait = the name of the metafunction within the tti namespace.
name = the name of the inner member.

-

returns = a metafunction called "tti::trait" where 'trait' is the macro parameter.

+

returns = a metafunction called "tti::trait" where 'trait' is the macro parameter.
+

The metafunction types and return:

T = the type, in the form of a member data pointer or member function pointer, in which to look for our 'name'.
returns = 'value' is true if the 'name' exists, with the appropriate type, otherwise 'value' is false.

@@ -41,7 +42,7 @@
-PrevUpHomeNext +PrevUpHomeNext
diff --git a/doc/html/TTI_TRAIT_HAS_MEMBER_DATA.html b/doc/html/TTI_TRAIT_HAS_MEMBER_DATA.html index 536bf67..b6c9270 100644 --- a/doc/html/TTI_TRAIT_HAS_MEMBER_DATA.html +++ b/doc/html/TTI_TRAIT_HAS_MEMBER_DATA.html @@ -6,14 +6,14 @@ - - + +

-PrevUpHomeNext +PrevUpHomeNext
@@ -26,7 +26,7 @@ TTI_TRAIT_HAS_MEMBER_DATA(trait, name)
-

Description

+

Description

trait = the name of the metafunction within the tti namespace.
name = the name of the inner member.

returns = a metafunction called "tti::trait" where 'trait' is the macro parameter.
@@ -43,7 +43,7 @@


-PrevUpHomeNext +PrevUpHomeNext
diff --git a/doc/html/TTI_TRAIT_HAS_MEMBER_FUNCTION.html b/doc/html/TTI_TRAIT_HAS_MEMBER_FUNCTION.html index ce1c4aa..6ad1560 100644 --- a/doc/html/TTI_TRAIT_HAS_MEMBER_FUNCTION.html +++ b/doc/html/TTI_TRAIT_HAS_MEMBER_FUNCTION.html @@ -6,14 +6,14 @@ - - + +

-PrevUpHomeNext +PrevUpHomeNext
@@ -26,7 +26,7 @@ TTI_TRAIT_HAS_MEMBER_FUNCTION(trait, name)
-

Description

+

Description

trait = the name of the metafunction within the tti namespace.
name = the name of the inner member.

returns = a metafunction called "tti::trait" where 'trait' is the macro parameter.
@@ -45,7 +45,7 @@


-PrevUpHomeNext +PrevUpHomeNext
diff --git a/doc/html/TTI_TRAIT_HAS_STATIC_MEMBER.html b/doc/html/TTI_TRAIT_HAS_STATIC_MEMBER.html index 9c9877b..d51f91b 100644 --- a/doc/html/TTI_TRAIT_HAS_STATIC_MEMBER.html +++ b/doc/html/TTI_TRAIT_HAS_STATIC_MEMBER.html @@ -6,14 +6,14 @@ - - + +

-PrevUpHomeNext +PrevUpHomeNext
@@ -26,7 +26,7 @@ TTI_TRAIT_HAS_STATIC_MEMBER(trait, name)
-

Description

+

Description

trait = the name of the metafunction within the tti namespace.
name = the name of the inner member.

returns = a metafunction called "tti::trait" where 'trait' is the macro parameter.
@@ -43,7 +43,7 @@


-PrevUpHomeNext +PrevUpHomeNext
diff --git a/doc/html/TTI_TRAIT_HAS_STATIC_MEMBER_FUNCTION.html b/doc/html/TTI_TRAIT_HAS_STATIC_MEMBER_FUNCTION.html index a50629a..e9da528 100644 --- a/doc/html/TTI_TRAIT_HAS_STATIC_MEMBER_FUNCTION.html +++ b/doc/html/TTI_TRAIT_HAS_STATIC_MEMBER_FUNCTION.html @@ -6,14 +6,14 @@ - - + +

-PrevUpHomeNext +PrevUpHomeNext
@@ -26,7 +26,7 @@ TTI_TRAIT_HAS_STATIC_MEMBER_FUNCTION(trait, name)
-

Description

+

Description

trait = the name of the metafunction within the tti namespace.
name = the name of the inner member.

returns = a metafunction called "tti::trait" where 'trait' is the macro parameter.
@@ -45,7 +45,7 @@


-PrevUpHomeNext +PrevUpHomeNext
diff --git a/doc/html/TTI_TRAIT_HAS_TEMPLATE.html b/doc/html/TTI_TRAIT_HAS_TEMPLATE.html index ffb245c..aec9e61 100644 --- a/doc/html/TTI_TRAIT_HAS_TEMPLATE.html +++ b/doc/html/TTI_TRAIT_HAS_TEMPLATE.html @@ -6,14 +6,14 @@ - - + +

-PrevUpHomeNext +PrevUpHomeNext
@@ -26,7 +26,7 @@ TTI_TRAIT_HAS_TEMPLATE(trait, name)
-

Description

+

Description

trait = the name of the metafunction within the tti namespace.
name = the name of the inner template.

returns = a metafunction called "tti::trait" where 'trait' is the macro parameter.

@@ -42,7 +42,7 @@
-PrevUpHomeNext +PrevUpHomeNext
diff --git a/doc/html/TTI_TRAIT_HAS_TEMPLATE_CHECK_PARAMS.html b/doc/html/TTI_TRAIT_HAS_TEMPLATE_CHECK_PARAMS.html index 4a89002..da6109a 100644 --- a/doc/html/TTI_TRAIT_HAS_TEMPLATE_CHECK_PARAMS.html +++ b/doc/html/TTI_TRAIT_HAS_TEMPLATE_CHECK_PARAMS.html @@ -6,14 +6,14 @@ - - + +

-PrevUpHomeNext +PrevUpHomeNext
@@ -26,7 +26,7 @@ TTI_TRAIT_HAS_TEMPLATE_CHECK_PARAMS(trait, name, tpSeq)
-

Description

+

Description

trait = the name of the metafunction within the tti namespace.
name = the name of the inner class template.
tpSeq = a Boost PP sequence which has the class template parameters. Each part of the template parameters separated by a comma ( , ) is put in a separate sequence element.
@@ -43,7 +43,7 @@


-PrevUpHomeNext +PrevUpHomeNext
diff --git a/doc/html/TTI_TRAIT_HAS_TYPE.html b/doc/html/TTI_TRAIT_HAS_TYPE.html index 0675b95..44699b6 100644 --- a/doc/html/TTI_TRAIT_HAS_TYPE.html +++ b/doc/html/TTI_TRAIT_HAS_TYPE.html @@ -7,13 +7,13 @@ - +

-PrevUpHomeNext +PrevUpHomeNext
@@ -26,7 +26,7 @@ TTI_TRAIT_HAS_TYPE(trait, name)
-

Description

+

Description

trait = the name of the metafunction within the tti namespace.
name = the name of the inner type.

returns = a metafunction called "tti::trait" where 'trait' is the macro parameter.

@@ -42,7 +42,7 @@
-PrevUpHomeNext +PrevUpHomeNext
diff --git a/doc/html/TTI_TRAIT_MEMBER_TYPE.html b/doc/html/TTI_TRAIT_MEMBER_TYPE.html index 1c855fd..688a74d 100644 --- a/doc/html/TTI_TRAIT_MEMBER_TYPE.html +++ b/doc/html/TTI_TRAIT_MEMBER_TYPE.html @@ -6,14 +6,14 @@ - - + +

-PrevUpHomeNext +PrevUpHomeNext
@@ -26,7 +26,7 @@ TTI_TRAIT_MEMBER_TYPE(trait, name)
-

Description

+

Description

trait = the name of the metafunction within the tti namespace.
name = the name of the inner type.

returns = a metafunction called "tti::trait" where 'trait' is the macro parameter.

@@ -43,7 +43,7 @@
-PrevUpHomeNext +PrevUpHomeNext
diff --git a/doc/html/TTI_VM_HAS_TEMPLATE_CHECK_PARAMS.html b/doc/html/TTI_VM_HAS_TEMPLATE_CHECK_PARAMS.html index 852fcea..4575509 100644 --- a/doc/html/TTI_VM_HAS_TEMPLATE_CHECK_PARAMS.html +++ b/doc/html/TTI_VM_HAS_TEMPLATE_CHECK_PARAMS.html @@ -6,14 +6,14 @@ - - + +

-PrevUpHomeNext +PrevUpHomeNext
@@ -26,7 +26,7 @@ TTI_VM_HAS_TEMPLATE_CHECK_PARAMS(name, ...)
-

Description

+

Description

name = the name of the inner class template.
... = variadic macro data which has the class template parameters.

returns = a metafunction called "tti::has_template_check_params_name" where 'name' is the macro parameter.

@@ -41,7 +41,7 @@
-PrevUpHomeNext +PrevUpHomeNext
diff --git a/doc/html/TTI_VM_MTFC_HAS_TEMPLATE_CHECK_PARAMS.html b/doc/html/TTI_VM_MTFC_HAS_TEMPLATE_CHECK_PARAMS.html new file mode 100644 index 0000000..ea5e133 --- /dev/null +++ b/doc/html/TTI_VM_MTFC_HAS_TEMPLATE_CHECK_PARAMS.html @@ -0,0 +1,47 @@ + + + +Macro TTI_VM_MTFC_HAS_TEMPLATE_CHECK_PARAMS + + + + + + + + +
+
+
+PrevUpHomeNext +
+
+
+
+

Macro TTI_VM_MTFC_HAS_TEMPLATE_CHECK_PARAMS

+

TTI_VM_MTFC_HAS_TEMPLATE_CHECK_PARAMS — Expands to a metafunction class which tests whether an inner class template with a particular name and signature exists.

+
+

Synopsis

+
// In header: <boost/tti/TTIntrospectionVM.hpp>
+
+TTI_VM_MTFC_HAS_TEMPLATE_CHECK_PARAMS(name, ...)
+
+

Description

+

name = the name of the inner class template.
+ ... = variadic macro data which has the class template parameters.

+

returns = a metafunction class called "tti::mtfc_has_template_check_params_name" where 'name' is the macro parameter.

+

The metafunction class's 'apply' metafunction types and return:

+

T = the enclosing type in which to look for our 'name'.
+ returns = 'value' is true if the 'name' class template, with the signature as defined by the '...' variadic macro data, exists within the enclosing type, otherwise 'value' is false.

+
+
+ + + +
+
+
+PrevUpHomeNext +
+ + diff --git a/doc/html/TTI_VM_MTFC_TRAIT_HAS_TEMPLATE_CHECK_PARAMS.html b/doc/html/TTI_VM_MTFC_TRAIT_HAS_TEMPLATE_CHECK_PARAMS.html new file mode 100644 index 0000000..3abd15d --- /dev/null +++ b/doc/html/TTI_VM_MTFC_TRAIT_HAS_TEMPLATE_CHECK_PARAMS.html @@ -0,0 +1,48 @@ + + + +Macro TTI_VM_MTFC_TRAIT_HAS_TEMPLATE_CHECK_PARAMS + + + + + + + + +
+
+
+PrevUpHomeNext +
+
+
+
+

Macro TTI_VM_MTFC_TRAIT_HAS_TEMPLATE_CHECK_PARAMS

+

TTI_VM_MTFC_TRAIT_HAS_TEMPLATE_CHECK_PARAMS — Expands to a metafunction class which tests whether an inner class template with a particular name and signature exists.

+
+

Synopsis

+
// In header: <boost/tti/TTIntrospectionVM.hpp>
+
+TTI_VM_MTFC_TRAIT_HAS_TEMPLATE_CHECK_PARAMS(trait, name, ...)
+
+

Description

+

trait = the name of the metafunction class within the tti namespace.
+ name = the name of the inner class template.
+ ... = variadic macro data which has the class template parameters.

+

returns = a metafunction class called "tti::trait" where 'trait' is the macro parameter.

+

The metafunction class's 'apply' metafunction types and return:

+

T = the enclosing type in which to look for our 'name'.
+ returns = 'value' is true if the 'name' class template, with the signature as defined by the '...' variadic macro data, exists within the enclosing type, otherwise 'value' is false.

+
+
+ + + +
+
+
+PrevUpHomeNext +
+ + diff --git a/doc/html/TTI_VM_TRAIT_HAS_TEMPLATE_CHECK_PARAMS.html b/doc/html/TTI_VM_TRAIT_HAS_TEMPLATE_CHECK_PARAMS.html index 18606c7..9c95a7c 100644 --- a/doc/html/TTI_VM_TRAIT_HAS_TEMPLATE_CHECK_PARAMS.html +++ b/doc/html/TTI_VM_TRAIT_HAS_TEMPLATE_CHECK_PARAMS.html @@ -7,13 +7,13 @@ - +

-PrevUpHomeNext +PrevUpHomeNext
@@ -26,7 +26,7 @@ TTI_VM_TRAIT_HAS_TEMPLATE_CHECK_PARAMS(trait, name, ...)
-

Description

+

Description

trait = the name of the metafunction within the tti namespace.
name = the name of the inner class template.
... = variadic macro data which has the class template parameters.

@@ -42,7 +42,7 @@
-PrevUpHomeNext +PrevUpHomeNext
diff --git a/doc/html/header/boost/tti/TTIntrospectionTemplate_hpp.html b/doc/html/header/boost/tti/TTIntrospectionTemplate_hpp.html index 3dc24e5..90b362b 100644 --- a/doc/html/header/boost/tti/TTIntrospectionTemplate_hpp.html +++ b/doc/html/header/boost/tti/TTIntrospectionTemplate_hpp.html @@ -6,21 +6,21 @@ - - + +

-PrevUpHomeNext +PrevUpHomeNext
namespace tti {
   template<typename HasTemplateCheckParams, typename T> 
-    struct mf_has_template_check_params;
+    struct mf_has_template_check_params;
 }
@@ -29,7 +29,7 @@

-PrevUpHomeNext +PrevUpHomeNext
diff --git a/doc/html/header/boost/tti/TTIntrospectionVM_hpp.html b/doc/html/header/boost/tti/TTIntrospectionVM_hpp.html index 94315da..c0329ab 100644 --- a/doc/html/header/boost/tti/TTIntrospectionVM_hpp.html +++ b/doc/html/header/boost/tti/TTIntrospectionVM_hpp.html @@ -6,14 +6,14 @@ - +

-PrevUpHomeNext +PrevUpHomeNext
@@ -29,7 +31,7 @@

-PrevUpHomeNext +PrevUpHomeNext
diff --git a/doc/html/index.html b/doc/html/index.html index 3448b65..fa3f412 100644 --- a/doc/html/index.html +++ b/doc/html/index.html @@ -35,6 +35,8 @@ Types
Using the Macro Metafunctions
+
Macro + Metafunctions as Metadata
Nullary Type Metafunctions
Using @@ -53,7 +55,7 @@
History
ToDo
Acknowledgments
-
Index
+
Index
@@ -61,7 +63,7 @@ Introduction

- Welcome to the Type Traits Introspection library version 1.1 . + Welcome to the Type Traits Introspection library version 1.2 .

The Type Traits Introspection library, or TTI for short, is a library of macros @@ -105,6 +107,12 @@ when specifying function and data syntax rather than a composite type. These metafunctions are called 'nullary type metafunctions' in the documentation. +

  • + Provide a set of macros for all of the macro metafunctions which create + metafunction classes, so the metafunctions generated by the macro metafunctions + can be passed as metadata. These can be used by the nullary type metafunctions, + and may find other uses for the template metaprogrammer. +
  • The library is a header only library. @@ -146,7 +154,7 @@

    - +

    Last revised: February 06, 2011 at 16:42:29 GMT

    Last revised: February 09, 2011 at 23:49:49 GMT


    diff --git a/doc/html/index/s16.html b/doc/html/index/s16.html new file mode 100644 index 0000000..0462005 --- /dev/null +++ b/doc/html/index/s16.html @@ -0,0 +1,521 @@ + + + +Index + + + + + + + +
    +
    +
    +PrevUpHome +
    +
    +

    +Index

    +

    G H M N T U V

    +
    +
    +G +
    +
    +
    General Functionality
    +
    + + +

    TTI_HAS_TYPE

    TTI_TRAIT_HAS_TYPE

    +
    +
    +H +
    +
    +
    Header < boost/tti/TTIntrospection.hpp >
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    mf_has_member_data

    mf_has_member_function

    mf_has_static_data

    mf_has_static_member_function

    mf_has_template

    mf_has_type

    mf_member_type

    mf_valid_member_type

    TTI_HAS_MEMBER

    TTI_HAS_MEMBER_DATA

    TTI_HAS_MEMBER_FUNCTION

    TTI_HAS_STATIC_MEMBER

    TTI_HAS_STATIC_MEMBER_FUNCTION

    TTI_HAS_TEMPLATE

    TTI_HAS_TEMPLATE_CHECK_PARAMS

    TTI_HAS_TYPE

    TTI_MEMBER_TYPE

    TTI_MTFC_HAS_MEMBER

    TTI_MTFC_HAS_MEMBER_DATA

    TTI_MTFC_HAS_MEMBER_FUNCTION

    TTI_MTFC_HAS_STATIC_MEMBER

    TTI_MTFC_HAS_STATIC_MEMBER_FUNCTION

    TTI_MTFC_HAS_TEMPLATE

    TTI_MTFC_HAS_TEMPLATE_CHECK_PARAMS

    TTI_MTFC_HAS_TYPE

    TTI_MTFC_MEMBER_TYPE

    TTI_MTFC_TRAIT_HAS_MEMBER

    TTI_MTFC_TRAIT_HAS_MEMBER_DATA

    TTI_MTFC_TRAIT_HAS_MEMBER_FUNCTION

    TTI_MTFC_TRAIT_HAS_STATIC_MEMBER

    TTI_MTFC_TRAIT_HAS_STATIC_MEMBER_FUNCTION

    TTI_MTFC_TRAIT_HAS_TEMPLATE

    TTI_MTFC_TRAIT_HAS_TEMPLATE_CHECK_PARAMS

    TTI_MTFC_TRAIT_HAS_TYPE

    TTI_MTFC_TRAIT_MEMBER_TYPE

    TTI_TRAIT_HAS_MEMBER

    TTI_TRAIT_HAS_MEMBER_DATA

    TTI_TRAIT_HAS_MEMBER_FUNCTION

    TTI_TRAIT_HAS_STATIC_MEMBER

    TTI_TRAIT_HAS_STATIC_MEMBER_FUNCTION

    TTI_TRAIT_HAS_TEMPLATE

    TTI_TRAIT_HAS_TEMPLATE_CHECK_PARAMS

    TTI_TRAIT_HAS_TYPE

    TTI_TRAIT_MEMBER_TYPE

    valid_member_type

    +
    Header < boost/tti/TTIntrospectionTemplate.hpp >
    +
    + + + + + + + + + +

    mf_has_template_check_params

    TTI_HAS_TEMPLATE_CHECK_PARAMS

    TTI_MTFC_HAS_TEMPLATE_CHECK_PARAMS

    TTI_MTFC_TRAIT_HAS_TEMPLATE_CHECK_PARAMS

    TTI_TRAIT_HAS_TEMPLATE_CHECK_PARAMS

    TTI_VM_HAS_TEMPLATE_CHECK_PARAMS

    TTI_VM_MTFC_HAS_TEMPLATE_CHECK_PARAMS

    TTI_VM_MTFC_TRAIT_HAS_TEMPLATE_CHECK_PARAMS

    TTI_VM_TRAIT_HAS_TEMPLATE_CHECK_PARAMS

    +
    Header < boost/tti/TTIntrospectionVM.hpp >
    +
    + + + + +

    TTI_VM_HAS_TEMPLATE_CHECK_PARAMS

    TTI_VM_MTFC_HAS_TEMPLATE_CHECK_PARAMS

    TTI_VM_MTFC_TRAIT_HAS_TEMPLATE_CHECK_PARAMS

    TTI_VM_TRAIT_HAS_TEMPLATE_CHECK_PARAMS

    +
    History
    +
    + + + + + +

    TTI_HAS_MEMBER_DATA

    TTI_HAS_MEMBER_FUNCTION

    TTI_HAS_STATIC_MEMBER_FUNCTION

    TTI_HAS_TYPE

    TTI_MEMBER_TYPE

    +
    +
    +M +
    +
    +
    Macro Metafunctions
    +
    + + + + + + + + + + +

    TTI_HAS_MEMBER

    TTI_HAS_MEMBER_DATA

    TTI_HAS_MEMBER_FUNCTION

    TTI_HAS_STATIC_MEMBER

    TTI_HAS_STATIC_MEMBER_FUNCTION

    TTI_HAS_TEMPLATE

    TTI_HAS_TEMPLATE_CHECK_PARAMS

    TTI_HAS_TYPE

    TTI_MEMBER_TYPE

    TTI_VM_HAS_TEMPLATE_CHECK_PARAMS

    +
    Macro Metafunctions as Metadata
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    TTI_HAS_MEMBER

    TTI_HAS_MEMBER_DATA

    TTI_HAS_MEMBER_FUNCTION

    TTI_HAS_STATIC_MEMBER

    TTI_HAS_STATIC_MEMBER_FUNCTION

    TTI_HAS_TEMPLATE

    TTI_HAS_TEMPLATE_CHECK_PARAMS

    TTI_HAS_TYPE

    TTI_MTFC_HAS_MEMBER

    TTI_MTFC_HAS_MEMBER_DATA

    TTI_MTFC_HAS_MEMBER_FUNCTION

    TTI_MTFC_HAS_STATIC_MEMBER

    TTI_MTFC_HAS_STATIC_MEMBER_FUNCTION

    TTI_MTFC_HAS_TEMPLATE

    TTI_MTFC_HAS_TEMPLATE_CHECK_PARAMS

    TTI_MTFC_HAS_TYPE

    TTI_MTFC_TRAIT_HAS_MEMBER

    TTI_MTFC_TRAIT_HAS_MEMBER_DATA

    TTI_MTFC_TRAIT_HAS_MEMBER_FUNCTION

    TTI_MTFC_TRAIT_HAS_STATIC_MEMBER

    TTI_MTFC_TRAIT_HAS_STATIC_MEMBER_FUNCTION

    TTI_MTFC_TRAIT_HAS_TEMPLATE

    TTI_MTFC_TRAIT_HAS_TEMPLATE_CHECK_PARAMS

    TTI_MTFC_TRAIT_HAS_TYPE

    TTI_TRAIT_HAS_MEMBER

    TTI_TRAIT_HAS_MEMBER_DATA

    TTI_TRAIT_HAS_MEMBER_FUNCTION

    TTI_TRAIT_HAS_STATIC_MEMBER

    TTI_TRAIT_HAS_STATIC_MEMBER_FUNCTION

    TTI_TRAIT_HAS_TEMPLATE

    TTI_TRAIT_HAS_TEMPLATE_CHECK_PARAMS

    TTI_TRAIT_HAS_TYPE

    TTI_VM_HAS_TEMPLATE_CHECK_PARAMS

    TTI_VM_MTFC_HAS_TEMPLATE_CHECK_PARAMS

    TTI_VM_MTFC_TRAIT_HAS_TEMPLATE_CHECK_PARAMS

    TTI_VM_TRAIT_HAS_TEMPLATE_CHECK_PARAMS

    +
    mf_has_member_data
    +

    Header < boost/tti/TTIntrospection.hpp >

    +
    mf_has_member_function
    +

    Header < boost/tti/TTIntrospection.hpp >

    +
    mf_has_static_data
    +

    Header < boost/tti/TTIntrospection.hpp >

    +
    mf_has_static_member_function
    +

    Header < boost/tti/TTIntrospection.hpp >

    +
    mf_has_template
    +

    Header < boost/tti/TTIntrospection.hpp >

    +
    mf_has_template_check_params
    +

    Header < boost/tti/TTIntrospectionTemplate.hpp >

    +
    mf_has_type
    +

    Header < boost/tti/TTIntrospection.hpp >

    +
    mf_member_type
    +

    Header < boost/tti/TTIntrospection.hpp >

    +
    mf_valid_member_type
    +

    Header < boost/tti/TTIntrospection.hpp >

    +
    +
    +N +
    +
    +
    +T +
    +
    +
    TTI_HAS_MEMBER
    +
    + + + + + +

    Header < boost/tti/TTIntrospection.hpp >

    Macro Metafunctions

    Macro Metafunctions as Metadata

    Nested Types

    Using the Macro Metafunctions

    +
    TTI_HAS_MEMBER_DATA
    +
    + + + + + + + +

    Header < boost/tti/TTIntrospection.hpp >

    History

    Macro Metafunctions

    Macro Metafunctions as Metadata

    Nested Types

    Nullary Type Metafunctions

    Using the Macro Metafunctions

    +
    TTI_HAS_MEMBER_FUNCTION
    +
    + + + + + + + + +

    Header < boost/tti/TTIntrospection.hpp >

    History

    Macro Metafunctions

    Macro Metafunctions as Metadata

    Nested Types

    Nullary Type Metafunctions

    Using the Macro Metafunctions

    Using the Nullary Type Metafunctions

    +
    TTI_HAS_STATIC_MEMBER
    +
    + + + + + + +

    Header < boost/tti/TTIntrospection.hpp >

    Macro Metafunctions

    Macro Metafunctions as Metadata

    Nested Types

    Nullary Type Metafunctions

    Using the Macro Metafunctions

    +
    TTI_HAS_STATIC_MEMBER_FUNCTION
    +
    + + + + + + + +

    Header < boost/tti/TTIntrospection.hpp >

    History

    Macro Metafunctions

    Macro Metafunctions as Metadata

    Nested Types

    Nullary Type Metafunctions

    Using the Nullary Type Metafunctions

    +
    TTI_HAS_TEMPLATE
    +
    + + + + + +

    Header < boost/tti/TTIntrospection.hpp >

    Macro Metafunctions

    Macro Metafunctions as Metadata

    Nullary Type Metafunctions

    Using the Macro Metafunctions

    +
    TTI_HAS_TEMPLATE_CHECK_PARAMS
    +
    + + + + + + + +

    Header < boost/tti/TTIntrospection.hpp >

    Header < boost/tti/TTIntrospectionTemplate.hpp >

    Macro Metafunctions

    Macro Metafunctions as Metadata

    Nullary Type Metafunctions

    Using the Macro Metafunctions

    Using the Nullary Type Metafunctions

    +
    TTI_HAS_TYPE
    +
    + + + + + + + + + +

    General Functionality

    Header < boost/tti/TTIntrospection.hpp >

    History

    Macro Metafunctions

    Macro Metafunctions as Metadata

    Nested Types

    Nullary Type Metafunctions

    Using the Macro Metafunctions

    Using the Nullary Type Metafunctions

    +
    TTI_MEMBER_TYPE
    +
    + + + + + + + +

    Header < boost/tti/TTIntrospection.hpp >

    History

    Macro Metafunctions

    Nested Types

    Nullary Type Metafunctions

    Using the Macro Metafunctions

    Using the Nullary Type Metafunctions

    +
    TTI_MTFC_HAS_MEMBER
    +
    + + +

    Header < boost/tti/TTIntrospection.hpp >

    Macro Metafunctions as Metadata

    +
    TTI_MTFC_HAS_MEMBER_DATA
    +
    + + + +

    Header < boost/tti/TTIntrospection.hpp >

    Macro Metafunctions as Metadata

    Using the Nullary Type Metafunctions

    +
    TTI_MTFC_HAS_MEMBER_FUNCTION
    +
    + + +

    Header < boost/tti/TTIntrospection.hpp >

    Macro Metafunctions as Metadata

    +
    TTI_MTFC_HAS_STATIC_MEMBER
    +
    + + + +

    Header < boost/tti/TTIntrospection.hpp >

    Macro Metafunctions as Metadata

    Using the Nullary Type Metafunctions

    +
    TTI_MTFC_HAS_STATIC_MEMBER_FUNCTION
    +
    + + +

    Header < boost/tti/TTIntrospection.hpp >

    Macro Metafunctions as Metadata

    +
    TTI_MTFC_HAS_TEMPLATE
    +
    + + + +

    Header < boost/tti/TTIntrospection.hpp >

    Macro Metafunctions as Metadata

    Using the Nullary Type Metafunctions

    +
    TTI_MTFC_HAS_TEMPLATE_CHECK_PARAMS
    +
    + + + +

    Header < boost/tti/TTIntrospection.hpp >

    Header < boost/tti/TTIntrospectionTemplate.hpp >

    Macro Metafunctions as Metadata

    +
    TTI_MTFC_HAS_TYPE
    +
    + + + +

    Header < boost/tti/TTIntrospection.hpp >

    Macro Metafunctions as Metadata

    Using the Nullary Type Metafunctions

    +
    TTI_MTFC_MEMBER_TYPE
    +
    + + +

    Header < boost/tti/TTIntrospection.hpp >

    Using the Nullary Type Metafunctions

    +
    TTI_MTFC_TRAIT_HAS_MEMBER
    +
    + + +

    Header < boost/tti/TTIntrospection.hpp >

    Macro Metafunctions as Metadata

    +
    TTI_MTFC_TRAIT_HAS_MEMBER_DATA
    +
    + + +

    Header < boost/tti/TTIntrospection.hpp >

    Macro Metafunctions as Metadata

    +
    TTI_MTFC_TRAIT_HAS_MEMBER_FUNCTION
    +
    + + +

    Header < boost/tti/TTIntrospection.hpp >

    Macro Metafunctions as Metadata

    +
    TTI_MTFC_TRAIT_HAS_STATIC_MEMBER
    +
    + + +

    Header < boost/tti/TTIntrospection.hpp >

    Macro Metafunctions as Metadata

    +
    TTI_MTFC_TRAIT_HAS_STATIC_MEMBER_FUNCTION
    +
    + + +

    Header < boost/tti/TTIntrospection.hpp >

    Macro Metafunctions as Metadata

    +
    TTI_MTFC_TRAIT_HAS_TEMPLATE
    +
    + + +

    Header < boost/tti/TTIntrospection.hpp >

    Macro Metafunctions as Metadata

    +
    TTI_MTFC_TRAIT_HAS_TEMPLATE_CHECK_PARAMS
    +
    + + + +

    Header < boost/tti/TTIntrospection.hpp >

    Header < boost/tti/TTIntrospectionTemplate.hpp >

    Macro Metafunctions as Metadata

    +
    TTI_MTFC_TRAIT_HAS_TYPE
    +
    + + +

    Header < boost/tti/TTIntrospection.hpp >

    Macro Metafunctions as Metadata

    +
    TTI_MTFC_TRAIT_MEMBER_TYPE
    +

    Header < boost/tti/TTIntrospection.hpp >

    +
    TTI_TRAIT_HAS_MEMBER
    +
    + + +

    Header < boost/tti/TTIntrospection.hpp >

    Macro Metafunctions as Metadata

    +
    TTI_TRAIT_HAS_MEMBER_DATA
    +
    + + +

    Header < boost/tti/TTIntrospection.hpp >

    Macro Metafunctions as Metadata

    +
    TTI_TRAIT_HAS_MEMBER_FUNCTION
    +
    + + +

    Header < boost/tti/TTIntrospection.hpp >

    Macro Metafunctions as Metadata

    +
    TTI_TRAIT_HAS_STATIC_MEMBER
    +
    + + +

    Header < boost/tti/TTIntrospection.hpp >

    Macro Metafunctions as Metadata

    +
    TTI_TRAIT_HAS_STATIC_MEMBER_FUNCTION
    +
    + + +

    Header < boost/tti/TTIntrospection.hpp >

    Macro Metafunctions as Metadata

    +
    TTI_TRAIT_HAS_TEMPLATE
    +
    + + +

    Header < boost/tti/TTIntrospection.hpp >

    Macro Metafunctions as Metadata

    +
    TTI_TRAIT_HAS_TEMPLATE_CHECK_PARAMS
    +
    + + + +

    Header < boost/tti/TTIntrospection.hpp >

    Header < boost/tti/TTIntrospectionTemplate.hpp >

    Macro Metafunctions as Metadata

    +
    TTI_TRAIT_HAS_TYPE
    +
    + + + +

    General Functionality

    Header < boost/tti/TTIntrospection.hpp >

    Macro Metafunctions as Metadata

    +
    TTI_TRAIT_MEMBER_TYPE
    +

    Header < boost/tti/TTIntrospection.hpp >

    +
    TTI_VM_HAS_TEMPLATE_CHECK_PARAMS
    +
    + + + + + + +

    Header < boost/tti/TTIntrospectionTemplate.hpp >

    Header < boost/tti/TTIntrospectionVM.hpp >

    Macro Metafunctions

    Macro Metafunctions as Metadata

    Nullary Type Metafunctions

    Using the Macro Metafunctions

    +
    TTI_VM_MTFC_HAS_TEMPLATE_CHECK_PARAMS
    +
    + + + + +

    Header < boost/tti/TTIntrospectionTemplate.hpp >

    Header < boost/tti/TTIntrospectionVM.hpp >

    Macro Metafunctions as Metadata

    Using the Nullary Type Metafunctions

    +
    TTI_VM_MTFC_TRAIT_HAS_TEMPLATE_CHECK_PARAMS
    +
    + + + +

    Header < boost/tti/TTIntrospectionTemplate.hpp >

    Header < boost/tti/TTIntrospectionVM.hpp >

    Macro Metafunctions as Metadata

    +
    TTI_VM_TRAIT_HAS_TEMPLATE_CHECK_PARAMS
    +
    + + + +

    Header < boost/tti/TTIntrospectionTemplate.hpp >

    Header < boost/tti/TTIntrospectionVM.hpp >

    Macro Metafunctions as Metadata

    +
    +
    +U +
    +
    +
    +V +
    +
    +
    +
    + + + +
    +
    +
    +PrevUpHome +
    + + diff --git a/doc/html/the_type_traits_introspection_library/tti_acknowledgments.html b/doc/html/the_type_traits_introspection_library/tti_acknowledgments.html index fde8f66..3104ec4 100644 --- a/doc/html/the_type_traits_introspection_library/tti_acknowledgments.html +++ b/doc/html/the_type_traits_introspection_library/tti_acknowledgments.html @@ -7,13 +7,13 @@ - +

    -PrevUpHomeNext +PrevUpHomeNext

    @@ -31,7 +31,7 @@

    Two of the introspection templates are taken from the MPL and lifted into my - library under a different name for the sake of orthogonality, so I would like + library under a different name for the sake of completeness, so I would like to thank Aleksey Gurtovoy and David Abrahams for that library, and Daniel Walker for work on those MPL introspection macros.

    @@ -47,7 +47,7 @@
    -PrevUpHomeNext +PrevUpHomeNext
    diff --git a/doc/html/the_type_traits_introspection_library/tti_detail.html b/doc/html/the_type_traits_introspection_library/tti_detail.html index 8f5f2c2..2e2dd32 100644 --- a/doc/html/the_type_traits_introspection_library/tti_detail.html +++ b/doc/html/the_type_traits_introspection_library/tti_detail.html @@ -146,7 +146,7 @@

    - TTI_HAS_TEMPLATE_CHECK_PARAMS(name,ppSeq[a]) + TTI_HAS_TEMPLATE_CHECK_PARAMS(name,ppSeq[a])

    @@ -161,12 +161,12 @@

    - Class Template with params using variadic macros[b] + Class Template with params using variadic macros[b]

    - TTI_VM_HAS_TEMPLATE_CHECK_PARAMS(name,...[c]) + TTI_VM_HAS_TEMPLATE_CHECK_PARAMS(name,...[c])

    @@ -324,14 +324,14 @@ -

    [a] +

    [a] A Boost PP data sequence with each comma separated portion of the template parameters as its own sequence element.

    -

    [b] +

    [b] Header file is TTIntrospectionVM.hpp.

    -

    [c] +

    [c] The template parameters as variadic data.

    diff --git a/doc/html/the_type_traits_introspection_library/tti_history.html b/doc/html/the_type_traits_introspection_library/tti_history.html index 415b859..a29fcd0 100644 --- a/doc/html/the_type_traits_introspection_library/tti_history.html +++ b/doc/html/the_type_traits_introspection_library/tti_history.html @@ -19,8 +19,18 @@ +

    + + Version + 1.2 +

    +
    • + Added the set of metafunction class macros for passing the macro metafunctions + as metadata. This complements passing the macro metafunctions as metadata + using placeholder expressions. +

    - + Version 1.1

    @@ -105,7 +115,7 @@

    - + Version 1.0

    diff --git a/doc/html/the_type_traits_introspection_library/tti_metaclasses.html b/doc/html/the_type_traits_introspection_library/tti_metaclasses.html new file mode 100644 index 0000000..08e6a82 --- /dev/null +++ b/doc/html/the_type_traits_introspection_library/tti_metaclasses.html @@ -0,0 +1,420 @@ + + + +Macro Metafunctions as Metadata + + + + + + + + +
    +
    +
    +PrevUpHomeNext +
    +
    + +

    + As specified in the Boost MPL library, there are two ways to pass metafunctions + as metadata, and both ways fall under the Boost MPL terminology of 'lambda + expressions': +

    +
      +
    • + As a metafunction class +
    • +
    • + As a placeholder expression +
    • +
    +

    + Using a placeholder expression is the easiest way and does not require the + programmer to create a metafunction class for passing the metadata. The syntax + for this is fairly simple. The syntax for passing a macro metafunction becomes + 'macrometafunction<_>' etc. depending on how many parameters are bring + passed. Thus for two parameters we would have 'macrometafunction<_,_>' + etc., with another placeholder ('_') added for each subsequent parameter. +

    +

    + However using a placeholder expression may not be the fastest way when considering + compile-time speed. Because of this the TTI library provides a set of macros + for each of the macro metafunctions which generate a corresponding metafunction + class. We will call this set of macros the 'metafunction class macros'. +

    +

    + These macros take exactly the same macro parameters as their corresponding + macro metafunctions. They generate a corresponding metafunction class rather + than a metafunction itself, which allows us to pass our macro metafunctions + as metadata, just as using placeholder expressions allows us to do. +

    +

    + For these metafunction class macros there is a simple form and a complex form + name just as there is for the macro metafunctions. For each macro metafunction, + the name for the corresponding metafunction class macro is the macro metafunction + name with the sequence 'MTFC_' ( for "MeTaFunction Class" ) following + the TTI_ ( or TTI_VM_ ) portion of the macro metafunction name. The subsequent + metafunction class name, using the simple form, is the same name as the corresponding + macro metafunction name but with 'mtfc_' prepended to the name. +

    +

    + As with the complex form name of the macro metafunctions, the complex form + name of the corresponding metafunction class macros is completely determined + by the first 'trait' parameter. +

    +

    + In the following table I do not specify the macro parameters as they are exactly + the same as those for their corresponding macro metafunction: +

    +
    +

    Table 1.4. TTI Metafunction Classes

    +
    +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +

    + Macro Metafunction +

    +
    +

    + Metafunction Class Macro +

    +
    +

    + Metafunction Class Name +

    +
    +

    + TTI_HAS_TYPE +

    +
    +

    + TTI_MTFC_HAS_TYPE +

    +
    +

    + tti::mtfc_has_type_'name' +

    +
    +

    + TTI_TRAIT_HAS_TYPE +

    +
    +

    + TTI_MTFC_TRAIT_HAS_TYPE +

    +
    +

    + tti::'trait' +

    +
    +

    + TTI_HAS_TEMPLATE +

    +
    +

    + TTI_MTFC_HAS_TEMPLATE +

    +
    +

    + tti::mtfc_has_template_'name' +

    +
    +

    + TTI_TRAIT_HAS_TEMPLATE +

    +
    +

    + TTI_MTFC_TRAIT_HAS_TEMPLATE +

    +
    +

    + tti::'trait' +

    +
    +

    + TTI_HAS_TEMPLATE_CHECK_PARAMS +

    +
    +

    + TTI_MTFC_HAS_TEMPLATE_CHECK_PARAMS +

    +
    +

    + tti::mtfc_has_template_check_params_'name' +

    +
    +

    + TTI_TRAIT_HAS_TEMPLATE_CHECK_PARAMS +

    +
    +

    + TTI_MTFC_TRAIT_HAS_TEMPLATE_CHECK_PARAMS +

    +
    +

    + tti::'trait' +

    +
    +

    + TTI_VM_HAS_TEMPLATE_CHECK_PARAMS +

    +
    +

    + TTI_VM_MTFC_HAS_TEMPLATE_CHECK_PARAMS +

    +
    +

    + tti::mtfc_has_template_check_params_'name' +

    +
    +

    + TTI_VM_TRAIT_HAS_TEMPLATE_CHECK_PARAMS +

    +
    +

    + TTI_VM_MTFC_TRAIT_HAS_TEMPLATE_CHECK_PARAMS +

    +
    +

    + tti::'trait' +

    +
    +

    + TTI_HAS_MEMBER +

    +
    +

    + TTI_MTFC_HAS_MEMBER +

    +
    +

    + tti::mtfc_has_member_'name' +

    +
    +

    + TTI_TRAIT_HAS_MEMBER +

    +
    +

    + TTI_MTFC_TRAIT_HAS_MEMBER +

    +
    +

    + tti::'trait' +

    +
    +

    + TTI_HAS_MEMBER_DATA +

    +
    +

    + TTI_MTFC_HAS_MEMBER_DATA +

    +
    +

    + tti::mtfc_has_member_data_'name' +

    +
    +

    + TTI_TRAIT_HAS_MEMBER_DATA +

    +
    +

    + TTI_MTFC_TRAIT_HAS_MEMBER_DATA +

    +
    +

    + tti::'trait' +

    +
    +

    + TTI_HAS_MEMBER_FUNCTION +

    +
    +

    + TTI_MTFC_HAS_MEMBER_FUNCTION +

    +
    +

    + tti::mtfc_has_member_function_'name' +

    +
    +

    + TTI_TRAIT_HAS_MEMBER_FUNCTION +

    +
    +

    + TTI_MTFC_TRAIT_HAS_MEMBER_FUNCTION +

    +
    +

    + tti::'trait' +

    +
    +

    + TTI_HAS_STATIC_MEMBER +

    +
    +

    + TTI_MTFC_HAS_STATIC_MEMBER +

    +
    +

    + tti::has_static_member_'name' +

    +
    +

    + TTI_TRAIT_HAS_STATIC_MEMBER +

    +
    +

    + TTI_MTFC_TRAIT_HAS_STATIC_MEMBER +

    +
    +

    + tti::'trait' +

    +
    +

    + TTI_HAS_STATIC_MEMBER_FUNCTION +

    +
    +

    + TTI_MTFC_HAS_STATIC_MEMBER_FUNCTION +

    +
    +

    + tti::has_static_member_function_'name' +

    +
    +

    + TTI_TRAIT_HAS_STATIC_MEMBER_FUNCTION +

    +
    +

    + TTI_MTFC_TRAIT_HAS_STATIC_MEMBER_FUNCTION +

    +
    +

    + tti::'trait' +

    +
    +
    +
    +
    + + + +
    +
    +
    +PrevUpHomeNext +
    + + diff --git a/doc/html/the_type_traits_introspection_library/tti_metafunctions.html b/doc/html/the_type_traits_introspection_library/tti_metafunctions.html index 8e9cf04..bfe67e7 100644 --- a/doc/html/the_type_traits_introspection_library/tti_metafunctions.html +++ b/doc/html/the_type_traits_introspection_library/tti_metafunctions.html @@ -6,14 +6,14 @@ - +

    -PrevUpHomeNext +PrevUpHomeNext

    @@ -21,27 +21,41 @@ Type Metafunctions

    - The nullary type metafunctions parallel most of the macro metafunctions but - more easily allow a syntax where nested types can be specified without needing - to manually reach into the 'type' member of TTI_MEMBER_TYPE or its nullary - type metafunction equivalent of tti::mf_member_type. In a very real way the - nullary type metafunctions exist just to provide syntactic improvements over - the macro metafunctions and are not needed to use the library, since all of - the library functionality is already provided with the macro metafunctions. + The macro metafunctions provide a complete set of functionality for anything + one would like to do using the TTI library. Why then do we have another set + of parallel functionality as nullary type metafunctions ? +

    +

    + The nullary type metafunctions parallel those macro metafunctions in which + types are specified individually rather than in a composite manner. The individual + types are passed to the nullary type metafunctions as nullary metafunctions, + hence the name of this group of metafunctions. They more easily allow a syntax + where nested types can be specified without needing to manually reach into + the 'type' member of TTI_MEMBER_TYPE or the 'type' member of its nullary type + metafunction equivalent called tti::mf_member_type. +

    +

    + In a very real way the nullary type metafunctions exist just to provide syntactic + improvements over the macro metafunctions and are not needed to use the library, + since all of the library functionality is already provided with the macro metafunctions. Nonetheless syntactic ease of use is a very real goal of the TTI library and therefore these metafunctions are provided to allow that syntactic improvement.

    - For each of these nullary type metafunctions the first parameter is a Boost - MPL lambda expression using its corresponding the macro metafunction to pass - metafunctions as data. The easiest way to do this is to use a Boost MPL placeholder - expression. The syntax for passing the corresponding macro metafunction becomes - 'macrometafunction<>' etc. depending on how - many parameters are bring passed. Thus for two parameters we would have 'macrometafunction<,>' etc., with another placeholder ('') added - for each subsequent parameter. + The nullary type metafunctions reuse the metafunctions generated by the macro + metafunctions. To do this the result of a corresponding macro metafunction + needs to be passed as metadata to a given nullary metafunction.

    - The remaining parameter are 'types'. These 'types' always consist first of + A lambda expression, in the form of a metafunction class or a placeholder expression, + is passed as the first parameter to our nullary type metafunctions. We have + already seen how the TTI library supplies metafunction classes through the + use of metafunction class macros for each of the macro metafunctions. The end-user + can use these metafunction classes directly, or can use placeholder expressions + with the metafunctions generated by the macro metafunctions. +

    +

    + The remaining parameters are 'types'. These 'types' always consist first of the enclosing type and then possibly other types which make up the signature of whatever inner element we are introspecting. Each of these 'types' is passed as a nullary metafunction whose typedef 'type' is the actual type. @@ -50,9 +64,10 @@ The only exception to this use of nullary type metafunctions when specifying 'types' is when a Boost function_types tag type, which is optional, is specified as an addition to the function signature. Also when dealing with a function - signature and parameter types are being passed, while the parameter 'types' - themselves are in the form of nullary metafunctions, the MPL forward sequence - which contains the parameter 'types' should not be wrapped as a nullary metafunction. + signature and parameter types being passed, while the parameter 'types' themselves + are in the form of nullary metafunctions, the MPL forward sequence which contains + the parameter 'types' is a plain type and should not be wrapped as a nullary + metafunction.

    For a type which is in scope, we can always use boost::mpl::identity to create @@ -93,7 +108,7 @@ conflict with the macro metafunction names generated by the library.

    -

    Table 1.4. TTI Nullary Type Metafunctions

    +

    Table 1.5. TTI Nullary Type Metafunctions

    @@ -210,7 +225,7 @@

    - tti::mf_has_template_check_params + tti::mf_has_template_check_params

    @@ -331,7 +346,7 @@

    - tti::mf_has_static_member_function + tti::mf_has_static_member_function

    @@ -372,7 +387,7 @@ specify nested types in those signatures without using the T::InnerType notation.

    - + Nullary type metafunction member_type equivalent

    @@ -382,7 +397,7 @@ also the equivalent nullary type metafunction.

    -

    Table 1.5. TTI Nested Type Nullary Type Metafunction

    +

    Table 1.6. TTI Nested Type Nullary Type Metafunction

    @@ -517,7 +532,7 @@ or not our tti::mf_member_type nested type actually exists.

    -

    Table 1.6. TTI Nested Type Nullary Type Metafunction Existence

    +

    Table 1.7. TTI Nested Type Nullary Type Metafunction Existence

    @@ -581,7 +596,7 @@

    -PrevUpHomeNext +PrevUpHomeNext
    diff --git a/doc/html/the_type_traits_introspection_library/tti_nested_type.html b/doc/html/the_type_traits_introspection_library/tti_nested_type.html index 44fc2a9..01fc068 100644 --- a/doc/html/the_type_traits_introspection_library/tti_nested_type.html +++ b/doc/html/the_type_traits_introspection_library/tti_nested_type.html @@ -21,7 +21,7 @@ Types

    - + The problem

    @@ -73,7 +73,7 @@ code which we want.

    - + The solution

    @@ -236,7 +236,7 @@ types is easy.

    - + A more elegant solution

    @@ -256,8 +256,7 @@ the specifying of nested types easy and error-free to use.

    - This group of nullary type metafunctions will be fully explained later after - we give some examples of macro metafunction use. + This group of nullary type metafunctions will be fully explained later.

    diff --git a/doc/html/the_type_traits_introspection_library/tti_tests.html b/doc/html/the_type_traits_introspection_library/tti_tests.html index 8eaaeae..83d7eb5 100644 --- a/doc/html/the_type_traits_introspection_library/tti_tests.html +++ b/doc/html/the_type_traits_introspection_library/tti_tests.html @@ -6,14 +6,14 @@ - +

    -PrevUpHomeNext +PrevUpHomeNext

    @@ -44,7 +44,7 @@


    -PrevUpHomeNext +PrevUpHomeNext
    diff --git a/doc/html/the_type_traits_introspection_library/tti_usingMM.html b/doc/html/the_type_traits_introspection_library/tti_usingMM.html index c515cab..2b4b6b0 100644 --- a/doc/html/the_type_traits_introspection_library/tti_usingMM.html +++ b/doc/html/the_type_traits_introspection_library/tti_usingMM.html @@ -7,13 +7,13 @@ - +

    -PrevUpHomeNext +PrevUpHomeNext

    @@ -89,7 +89,7 @@ below the same macro is invoked just once to avoid ODR violations.

    - + Type

    @@ -113,7 +113,7 @@ >

    - + Type checking the typedef

    @@ -127,7 +127,7 @@ >

    - + Template

    @@ -142,7 +142,7 @@ >

    - + Template with params

    @@ -158,7 +158,7 @@ >

    - + Template with params using variadic macros

    @@ -183,7 +183,7 @@ >

    - + Member data with composite type

    @@ -198,7 +198,7 @@ >

    - + Member data with individual types

    @@ -214,7 +214,7 @@ >

    - + Member function with composite type

    @@ -230,7 +230,7 @@ >

    - + Member function with individual types

    @@ -248,7 +248,7 @@ >

    - + Static member data

    @@ -264,7 +264,7 @@ >

    - + Static member function with composite type

    @@ -281,7 +281,7 @@ >

    - + Static member function with individual types

    @@ -299,7 +299,7 @@ >

    - + Member type

    @@ -321,7 +321,7 @@ >::type

    - + Member type existence

    @@ -355,7 +355,7 @@
    -PrevUpHomeNext +PrevUpHomeNext
    diff --git a/doc/html/the_type_traits_introspection_library/tti_usingNTM.html b/doc/html/the_type_traits_introspection_library/tti_usingNTM.html index 1879a14..1c21e7a 100644 --- a/doc/html/the_type_traits_introspection_library/tti_usingNTM.html +++ b/doc/html/the_type_traits_introspection_library/tti_usingNTM.html @@ -108,8 +108,14 @@ above. Imagine this being within 'OurTemplateClass' above. In the examples below the same macro is invoked just once to avoid ODR violations.

    +

    + I will also be mixing the way the macro metafunction metadata is passed to + our nullary type metafunctions, whether as a metafunction class or as a placeholder + expression. Both will work just fine since our nullary type metafunctions work + with any lambda expression as the first template parameter. +

    - + Member type

    @@ -120,7 +126,7 @@ using 'tti::mf_member_type'.

    TTI_MEMBER_TYPE(BType)
    -TTI_MEMBER_TYPE(CType)
    +TTI_MTFC_MEMBER_TYPE(CType)
     TTI_MEMBER_TYPE(DType)
     
     typedef
    @@ -134,7 +140,7 @@
     typedef
     tti::mf_member_type
       <
    -  tti::member_type_CType<_>,
    +  tti::mtfc_member_type_CType,
       BTypeNM
       >
     CTypeNM;
    @@ -151,7 +157,7 @@
           We will use these typedefs in the ensuing examples.
         

    - + Type

    @@ -175,7 +181,7 @@ >

    - + Type checking the typedef

    @@ -183,33 +189,33 @@ Does T have a nested typedef called 'ADoubleType' within 'BType::CType::DType' whose type is a 'double' ?

    -
    TTI_HAS_TYPE(ADoubleType)
    +
    TTI_MTFC_HAS_TYPE(ADoubleType)
     
     tti::mf_has_type
       <
    -  tti::has_type_ADoubleType<_,_>,
    +  tti::mtfc_has_type_ADoubleType,
       DTypeNM,
       boost::mpl::identity<double>
       >
     

    - + Template

    Does T have a nested class template called 'AMemberTemplate' within 'BType::CType' whose template parameters are all types ('class' or 'typename') ?

    -
    TTI_HAS_TEMPLATE(AMemberTemplate)
    +
    TTI_MTFC_HAS_TEMPLATE(AMemberTemplate)
     
     tti::mf_has_template
       <
    -  tti::has_template_AMemberTemplate<_>,
    +  tti::mtfc_has_template_AMemberTemplate,
       CTypeNM
       >
     

    - + Template with params

    @@ -226,7 +232,7 @@ >

    - + Template with params using variadic macros

    @@ -243,33 +249,33 @@ Include the 'TTIntrospectionVM.hpp' header file when using this macro.

    -
    TTI_VM_HAS_TEMPLATE_CHECK_PARAMS(MoreParameters,class,class,int,short,class,template <class,int> class InnerTemplate,class)
    +
    TTI_VM_MTFC_HAS_TEMPLATE_CHECK_PARAMS(MoreParameters,class,class,int,short,class,template <class,int> class InnerTemplate,class)
     
     tti::mf_has_template_check_params
       <
    -  tti::has_template_check_params_MoreParameters<_>,
    +  tti::mtfc_has_template_check_params_MoreParameters,
       CTypeNM
       >
     

    - + Member data

    Does T have a member data called 'IntBT' whose type is 'BType' ?

    -
    TTI_HAS_MEMBER_DATA(IntBT)
    +
    TTI_MTFC_HAS_MEMBER_DATA(IntBT)
     
     tti::mf_has_member_data
       <
    -  tti::has_member_data_IntBT<_,_>,
    +  tti::mtfc_has_member_data_IntBT,
       boost::mpl::identity<T>,
       BTypeNM
       >
     

    - + Member function

    @@ -289,7 +295,7 @@ >

    - + Static member data

    @@ -297,17 +303,17 @@ Does T have a static member data called 'DSMember' within 'BType::CType::DType' whose type is 'short' ?

    -
    TTI_HAS_STATIC_MEMBER(DSMember)
    +
    TTI_MTFC_HAS_STATIC_MEMBER(DSMember)
     
     tti::mf_has_static_data
       <
    -  tti::has_static_member_DSMember<_,_>,
    +  tti::mtfc_has_static_member_DSMember,
       DTypeNM,
       boost::mpl::identity<short>
       >
     

    - + Static member function

    diff --git a/doc/html/tti/mf_has_member_data.html b/doc/html/tti/mf_has_member_data.html index 48e74f7..4a2a37d 100644 --- a/doc/html/tti/mf_has_member_data.html +++ b/doc/html/tti/mf_has_member_data.html @@ -7,13 +7,13 @@ - +

    -PrevUpHomeNext +PrevUpHomeNext
    @@ -28,11 +28,11 @@ struct mf_has_member_data { };
    -

    Description

    +

    Description

    This metafunction takes its specific types as nullary metafunctions whose typedef 'type' member is the actual type used.

    The metafunction types and return:

    HasMemberData = a Boost MPL lambda expression using the metafunction generated from the TTI_HAS_MEMBER_DATA ( or TTI_TRAIT_HAS_MEMBER_DATA ) macro.
    - The easiest way to generate the lambda expression is to use a Boost MPL placeholder expression of the form 'metafunction<_,_>'.
    + The easiest way to generate the lambda expression is to use a Boost MPL placeholder expression of the form 'metafunction<_,_>'. You can also use the metafunction class generated by the TTI_MTFC_HAS_MEMBER_DATA ( or TTI_MTFC_TRAIT_HAS_MEMBER_DATA ) macro.
    T = the enclosing type as a nullary metafunction.
    R = the type of the member data as a nullary metafunction.

    returns = 'value' is true if the member data exists within the enclosing type, otherwise 'value' is false.

    @@ -44,7 +44,7 @@
    -PrevUpHomeNext +PrevUpHomeNext
    diff --git a/doc/html/tti/mf_has_member_function.html b/doc/html/tti/mf_has_member_function.html index 11b99f5..ee40b60 100644 --- a/doc/html/tti/mf_has_member_function.html +++ b/doc/html/tti/mf_has_member_function.html @@ -30,11 +30,11 @@ struct mf_has_member_function { };
    -

    Description

    +

    Description

    This metafunction takes its specific types, except for the optional parameters, as nullary metafunctions whose typedef 'type' member is the actual type used.

    The metafunction types and return:

    HasMemberFunction = a Boost MPL lambda expression using the metafunction generated from the TTI_HAS_MEMBER_FUNCTION ( or TTI_TRAIT_HAS_MEMBER_FUNCTION ) macro.
    - The easiest way to generate the lambda expression is to use a Boost MPL placeholder expression of the form 'metafunction<_,_> ( or optionally 'metafunction<_,_,_> or ' 'metafunction<_,_,_,_> )'.
    + The easiest way to generate the lambda expression is to use a Boost MPL placeholder expression of the form 'metafunction<_,_> ( or optionally 'metafunction<_,_,_> or ' 'metafunction<_,_,_,_> )'. You can also use the metafunction class generated by the TTI_MTFC_HAS_MEMBER_FUNCTION ( or TTI_MTFC_TRAIT_HAS_MEMBER_FUNCTION ) macro.
    T = the enclosing type as a nullary metafunction.
    R = the return type of the member function as a nullary metafunction.
    FS = an optional parameter which is the parameters of the member function, each as a nullary metafunction, as a boost::mpl forward sequence.
    diff --git a/doc/html/tti/mf_has_static_data.html b/doc/html/tti/mf_has_static_data.html index a0dc0d6..94370d1 100644 --- a/doc/html/tti/mf_has_static_data.html +++ b/doc/html/tti/mf_has_static_data.html @@ -6,14 +6,14 @@ - +


    -PrevUpHomeNext +PrevUpHomeNext
    @@ -28,11 +28,11 @@ struct mf_has_static_data { };
    -

    Description

    +

    Description

    This metafunction takes its specific types as nullary metafunctions whose typedef 'type' member is the actual type used.

    The metafunction types and return:

    HasStaticMember = a Boost MPL lambda expression using the metafunction generated from the TTI_HAS_STATIC_MEMBER ( or TTI_TRAIT_HAS_STATIC_MEMBER ) macro.
    - The easiest way to generate the lambda expression is to use a Boost MPL placeholder expression of the form 'metafunction<_,_>'.
    + The easiest way to generate the lambda expression is to use a Boost MPL placeholder expression of the form 'metafunction<_,_>'. You can also use the metafunction class generated by the TTI_MTFC_HAS_STATIC_MEMBER ( or TTI_MTFC_TRAIT_HAS_STATIC_MEMBER ) macro.
    T = the enclosing type as a nullary metafunction.
    R = the type of the static member data as a nullary metafunction.

    returns = 'value' is true if the member data exists within the enclosing type, otherwise 'value' is false.

    @@ -44,7 +44,7 @@
    -PrevUpHomeNext +PrevUpHomeNext
    diff --git a/doc/html/tti/mf_has_static_member_fu_id397272.html b/doc/html/tti/mf_has_static_member_fu_id397272.html new file mode 100644 index 0000000..d29c252 --- /dev/null +++ b/doc/html/tti/mf_has_static_member_fu_id397272.html @@ -0,0 +1,54 @@ + + + +Struct template mf_has_static_member_function + + + + + + + + +
    +
    +
    +PrevUpHomeNext +
    +
    +
    +
    +

    Struct template mf_has_static_member_function

    +

    tti::mf_has_static_member_function — A metafunction which checks whether a static member function exists within an enclosing type.

    +
    +

    Synopsis

    +
    // In header: <boost/tti/TTIntrospection.hpp>
    +
    +template<typename HasStaticMemberFunction, typename T, typename R, 
    +         typename FS = boost::mpl::vector<>, 
    +         typename TAG = boost::function_types::null_tag> 
    +struct mf_has_static_member_function {
    +};
    +
    +

    Description

    +

    This metafunction takes its specific types, except for the optional parameters, as nullary metafunctions whose typedef 'type' member is the actual type used.

    +

    The metafunction types and return:

    +

    HasStaticMemberFunction = a Boost MPL lambda expression using the metafunction generated from the TTI_HAS_STATIC_MEMBER_FUNCTION ( or TTI_TRAIT_HAS_STATIC_MEMBER_FUNCTION ) macro.
    + The easiest way to generate the lambda expression is to use a Boost MPL placeholder expression of the form 'metafunction<_,_> ( or optionally 'metafunction<_,_,_> or ' 'metafunction<_,_,_,_> )'.
    + T = the enclosing type as a nullary metafunction.
    + R = the return type of the static member function as a nullary metafunction.
    + FS = an optional parameter which is the parameters of the static member function, each as a nullary metafunction, as a boost::mpl forward sequence.
    + TAG = an optional parameter which is a boost::function_types tag to apply to the static member function.

    +

    returns = 'value' is true if the member function exists within the enclosing type, otherwise 'value' is false.

    +
    +
    + + + +
    +
    +
    +PrevUpHomeNext +
    + + diff --git a/doc/html/tti/mf_has_static_member_fu_id406010.html b/doc/html/tti/mf_has_static_member_fu_id406010.html new file mode 100644 index 0000000..46fdf79 --- /dev/null +++ b/doc/html/tti/mf_has_static_member_fu_id406010.html @@ -0,0 +1,54 @@ + + + +Struct template mf_has_static_member_function + + + + + + + + +
    +
    +
    +PrevUpHomeNext +
    +
    +
    +
    +

    Struct template mf_has_static_member_function

    +

    tti::mf_has_static_member_function — A metafunction which checks whether a static member function exists within an enclosing type.

    +
    +

    Synopsis

    +
    // In header: <boost/tti/TTIntrospection.hpp>
    +
    +template<typename HasStaticMemberFunction, typename T, typename R, 
    +         typename FS = boost::mpl::vector<>, 
    +         typename TAG = boost::function_types::null_tag> 
    +struct mf_has_static_member_function {
    +};
    +
    +

    Description

    +

    This metafunction takes its specific types, except for the optional parameters, as nullary metafunctions whose typedef 'type' member is the actual type used.

    +

    The metafunction types and return:

    +

    HasStaticMemberFunction = a Boost MPL lambda expression using the metafunction generated from the TTI_HAS_STATIC_MEMBER_FUNCTION ( or TTI_TRAIT_HAS_STATIC_MEMBER_FUNCTION ) macro.
    + The easiest way to generate the lambda expression is to use a Boost MPL placeholder expression of the form 'metafunction<_,_> ( or optionally 'metafunction<_,_,_> or ' 'metafunction<_,_,_,_> )'.
    + T = the enclosing type as a nullary metafunction.
    + R = the return type of the static member function as a nullary metafunction.
    + FS = an optional parameter which is the parameters of the static member function, each as a nullary metafunction, as a boost::mpl forward sequence.
    + TAG = an optional parameter which is a boost::function_types tag to apply to the static member function.

    +

    returns = 'value' is true if the member function exists within the enclosing type, otherwise 'value' is false.

    +
    +
    + + + +
    +
    +
    +PrevUpHomeNext +
    + + diff --git a/doc/html/tti/mf_has_static_member_fu_id410380.html b/doc/html/tti/mf_has_static_member_fu_id410380.html new file mode 100644 index 0000000..a302711 --- /dev/null +++ b/doc/html/tti/mf_has_static_member_fu_id410380.html @@ -0,0 +1,54 @@ + + + +Struct template mf_has_static_member_function + + + + + + + + +
    +
    +
    +PrevUpHomeNext +
    +
    +
    +
    +

    Struct template mf_has_static_member_function

    +

    tti::mf_has_static_member_function — A metafunction which checks whether a static member function exists within an enclosing type.

    +
    +

    Synopsis

    +
    // In header: <boost/tti/TTIntrospection.hpp>
    +
    +template<typename HasStaticMemberFunction, typename T, typename R, 
    +         typename FS = boost::mpl::vector<>, 
    +         typename TAG = boost::function_types::null_tag> 
    +struct mf_has_static_member_function {
    +};
    +
    +

    Description

    +

    This metafunction takes its specific types, except for the optional parameters, as nullary metafunctions whose typedef 'type' member is the actual type used.

    +

    The metafunction types and return:

    +

    HasStaticMemberFunction = a Boost MPL lambda expression using the metafunction generated from the TTI_HAS_STATIC_MEMBER_FUNCTION ( or TTI_TRAIT_HAS_STATIC_MEMBER_FUNCTION ) macro.
    + The easiest way to generate the lambda expression is to use a Boost MPL placeholder expression of the form 'metafunction<_,_> ( or optionally 'metafunction<_,_,_> or ' 'metafunction<_,_,_,_> )'. You can also use the metafunction class generated by the TTI_MTFC_HAS_STATIC_MEMBER_FUNCTION ( or TTI_MTFC_TRAIT_HAS_STATIC_MEMBER_FUNCTION ) macro.
    + T = the enclosing type as a nullary metafunction.
    + R = the return type of the static member function as a nullary metafunction.
    + FS = an optional parameter which is the parameters of the static member function, each as a nullary metafunction, as a boost::mpl forward sequence.
    + TAG = an optional parameter which is a boost::function_types tag to apply to the static member function.

    +

    returns = 'value' is true if the member function exists within the enclosing type, otherwise 'value' is false.

    +
    +
    + + + +
    +
    +
    +PrevUpHomeNext +
    + + diff --git a/doc/html/tti/mf_has_static_member_fu_id412568.html b/doc/html/tti/mf_has_static_member_fu_id412568.html new file mode 100644 index 0000000..05fc0fd --- /dev/null +++ b/doc/html/tti/mf_has_static_member_fu_id412568.html @@ -0,0 +1,54 @@ + + + +Struct template mf_has_static_member_function + + + + + + + + +
    +
    +
    +PrevUpHomeNext +
    +
    +
    +
    +

    Struct template mf_has_static_member_function

    +

    tti::mf_has_static_member_function — A metafunction which checks whether a static member function exists within an enclosing type.

    +
    +

    Synopsis

    +
    // In header: <boost/tti/TTIntrospection.hpp>
    +
    +template<typename HasStaticMemberFunction, typename T, typename R, 
    +         typename FS = boost::mpl::vector<>, 
    +         typename TAG = boost::function_types::null_tag> 
    +struct mf_has_static_member_function {
    +};
    +
    +

    Description

    +

    This metafunction takes its specific types, except for the optional parameters, as nullary metafunctions whose typedef 'type' member is the actual type used.

    +

    The metafunction types and return:

    +

    HasStaticMemberFunction = a Boost MPL lambda expression using the metafunction generated from the TTI_HAS_STATIC_MEMBER_FUNCTION ( or TTI_TRAIT_HAS_STATIC_MEMBER_FUNCTION ) macro.
    + The easiest way to generate the lambda expression is to use a Boost MPL placeholder expression of the form 'metafunction<_,_> ( or optionally 'metafunction<_,_,_> or ' 'metafunction<_,_,_,_> )'. You can also use the metafunction class generated by the TTI_MTFC_HAS_STATIC_MEMBER_FUNCTION ( or TTI_MTFC_TRAIT_HAS_STATIC_MEMBER_FUNCTION ) macro.
    + T = the enclosing type as a nullary metafunction.
    + R = the return type of the static member function as a nullary metafunction.
    + FS = an optional parameter which is the parameters of the static member function, each as a nullary metafunction, as a boost::mpl forward sequence.
    + TAG = an optional parameter which is a boost::function_types tag to apply to the static member function.

    +

    returns = 'value' is true if the member function exists within the enclosing type, otherwise 'value' is false.

    +
    +
    + + + +
    +
    +
    +PrevUpHomeNext +
    + + diff --git a/doc/html/tti/mf_has_static_member_fu_id413654.html b/doc/html/tti/mf_has_static_member_fu_id413654.html new file mode 100644 index 0000000..73d12ce --- /dev/null +++ b/doc/html/tti/mf_has_static_member_fu_id413654.html @@ -0,0 +1,54 @@ + + + +Struct template mf_has_static_member_function + + + + + + + + +
    +
    +
    +PrevUpHomeNext +
    +
    +
    +
    +

    Struct template mf_has_static_member_function

    +

    tti::mf_has_static_member_function — A metafunction which checks whether a static member function exists within an enclosing type.

    +
    +

    Synopsis

    +
    // In header: <boost/tti/TTIntrospection.hpp>
    +
    +template<typename HasStaticMemberFunction, typename T, typename R, 
    +         typename FS = boost::mpl::vector<>, 
    +         typename TAG = boost::function_types::null_tag> 
    +struct mf_has_static_member_function {
    +};
    +
    +

    Description

    +

    This metafunction takes its specific types, except for the optional parameters, as nullary metafunctions whose typedef 'type' member is the actual type used.

    +

    The metafunction types and return:

    +

    HasStaticMemberFunction = a Boost MPL lambda expression using the metafunction generated from the TTI_HAS_STATIC_MEMBER_FUNCTION ( or TTI_TRAIT_HAS_STATIC_MEMBER_FUNCTION ) macro.
    + The easiest way to generate the lambda expression is to use a Boost MPL placeholder expression of the form 'metafunction<_,_> ( or optionally 'metafunction<_,_,_> or ' 'metafunction<_,_,_,_> )'.
    + T = the enclosing type as a nullary metafunction.
    + R = the return type of the static member function as a nullary metafunction.
    + FS = an optional parameter which is the parameters of the static member function, each as a nullary metafunction, as a boost::mpl forward sequence.
    + TAG = an optional parameter which is a boost::function_types tag to apply to the static member function.

    +

    returns = 'value' is true if the member function exists within the enclosing type, otherwise 'value' is false.

    +
    +
    + + + +
    +
    +
    +PrevUpHomeNext +
    + + diff --git a/doc/html/tti/mf_has_static_member_fu_id422394.html b/doc/html/tti/mf_has_static_member_fu_id422394.html new file mode 100644 index 0000000..2446155 --- /dev/null +++ b/doc/html/tti/mf_has_static_member_fu_id422394.html @@ -0,0 +1,54 @@ + + + +Struct template mf_has_static_member_function + + + + + + + + +
    +
    +
    +PrevUpHomeNext +
    +
    +
    +
    +

    Struct template mf_has_static_member_function

    +

    tti::mf_has_static_member_function — A metafunction which checks whether a static member function exists within an enclosing type.

    +
    +

    Synopsis

    +
    // In header: <boost/tti/TTIntrospection.hpp>
    +
    +template<typename HasStaticMemberFunction, typename T, typename R, 
    +         typename FS = boost::mpl::vector<>, 
    +         typename TAG = boost::function_types::null_tag> 
    +struct mf_has_static_member_function {
    +};
    +
    +

    Description

    +

    This metafunction takes its specific types, except for the optional parameters, as nullary metafunctions whose typedef 'type' member is the actual type used.

    +

    The metafunction types and return:

    +

    HasStaticMemberFunction = a Boost MPL lambda expression using the metafunction generated from the TTI_HAS_STATIC_MEMBER_FUNCTION ( or TTI_TRAIT_HAS_STATIC_MEMBER_FUNCTION ) macro.
    + The easiest way to generate the lambda expression is to use a Boost MPL placeholder expression of the form 'metafunction<_,_> ( or optionally 'metafunction<_,_,_> or ' 'metafunction<_,_,_,_> )'.
    + T = the enclosing type as a nullary metafunction.
    + R = the return type of the static member function as a nullary metafunction.
    + FS = an optional parameter which is the parameters of the static member function, each as a nullary metafunction, as a boost::mpl forward sequence.
    + TAG = an optional parameter which is a boost::function_types tag to apply to the static member function.

    +

    returns = 'value' is true if the member function exists within the enclosing type, otherwise 'value' is false.

    +
    +
    + + + +
    +
    +
    +PrevUpHomeNext +
    + + diff --git a/doc/html/tti/mf_has_static_member_fu_id426663.html b/doc/html/tti/mf_has_static_member_fu_id426663.html new file mode 100644 index 0000000..fe7a220 --- /dev/null +++ b/doc/html/tti/mf_has_static_member_fu_id426663.html @@ -0,0 +1,54 @@ + + + +Struct template mf_has_static_member_function + + + + + + + + +
    +
    +
    +PrevUpHomeNext +
    +
    +
    +
    +

    Struct template mf_has_static_member_function

    +

    tti::mf_has_static_member_function — A metafunction which checks whether a static member function exists within an enclosing type.

    +
    +

    Synopsis

    +
    // In header: <boost/tti/TTIntrospection.hpp>
    +
    +template<typename HasStaticMemberFunction, typename T, typename R, 
    +         typename FS = boost::mpl::vector<>, 
    +         typename TAG = boost::function_types::null_tag> 
    +struct mf_has_static_member_function {
    +};
    +
    +

    Description

    +

    This metafunction takes its specific types, except for the optional parameters, as nullary metafunctions whose typedef 'type' member is the actual type used.

    +

    The metafunction types and return:

    +

    HasStaticMemberFunction = a Boost MPL lambda expression using the metafunction generated from the TTI_HAS_STATIC_MEMBER_FUNCTION ( or TTI_TRAIT_HAS_STATIC_MEMBER_FUNCTION ) macro.
    + The easiest way to generate the lambda expression is to use a Boost MPL placeholder expression of the form 'metafunction<_,_> ( or optionally 'metafunction<_,_,_> or ' 'metafunction<_,_,_,_> )'.
    + T = the enclosing type as a nullary metafunction.
    + R = the return type of the static member function as a nullary metafunction.
    + FS = an optional parameter which is the parameters of the static member function, each as a nullary metafunction, as a boost::mpl forward sequence.
    + TAG = an optional parameter which is a boost::function_types tag to apply to the static member function.

    +

    returns = 'value' is true if the member function exists within the enclosing type, otherwise 'value' is false.

    +
    +
    + + + +
    +
    +
    +PrevUpHomeNext +
    + + diff --git a/doc/html/tti/mf_has_template.html b/doc/html/tti/mf_has_template.html index f5a8d5f..077b657 100644 --- a/doc/html/tti/mf_has_template.html +++ b/doc/html/tti/mf_has_template.html @@ -28,11 +28,11 @@ struct mf_has_template { };
    -

    Description

    +

    Description

    This metafunction takes its enclosing type as nullary metafunctions whose typedef 'type' member is the actual type used.

    The metafunction types and return:

    HasTemplate = a Boost MPL lambda expression using the metafunction generated from the TTI_HAS_TEMPLATE ( TTI_TRAIT_HAS_TEMPLATE ) macro.
    - The easiest way to generate the lambda expression is to use a Boost MPL placeholder expression of the form 'metafunction<_>'.
    + The easiest way to generate the lambda expression is to use a Boost MPL placeholder expression of the form 'metafunction<_>'. You can also use the metafunction class generated by the TTI_MTFC_HAS_TEMPLATE ( TTI_MTFC_TRAIT_HAS_TEMPLATE ) macro.
    T = the enclosing type as a nullary metafunction.

    returns = 'value' is true if the template exists within the enclosing type, otherwise 'value' is false.

    diff --git a/doc/html/tti/mf_has_template_check_p_id398430.html b/doc/html/tti/mf_has_template_check_p_id398430.html new file mode 100644 index 0000000..69ebf19 --- /dev/null +++ b/doc/html/tti/mf_has_template_check_p_id398430.html @@ -0,0 +1,49 @@ + + + +Struct template mf_has_template_check_params + + + + + + + + +
    +
    +
    +PrevUpHomeNext +
    +
    +
    +
    +

    Struct template mf_has_template_check_params

    +

    tti::mf_has_template_check_params — A metafunction which checks whether a class template with its parameters exists within an enclosing type.

    +
    +

    Synopsis

    +
    // In header: <boost/tti/TTIntrospectionTemplate.hpp>
    +
    +template<typename HasTemplateCheckParams, typename T> 
    +struct mf_has_template_check_params {
    +};
    +
    +

    Description

    +

    This metafunction takes its enclosing type as nullary metafunctions whose typedef 'type' member is the actual type used.

    +

    The metafunction types and return:

    +

    HasTemplateCheckParams = a Boost MPL lambda expression using the metafunction generated from either the TTI_HAS_TEMPLATE_CHECK_PARAMS ( TTI_TRAIT_HAS_TEMPLATE_CHECK_PARAMS ) or TTI_VM_HAS_TEMPLATE_CHECK_PARAMS ( TTI_VM_TRAIT_HAS_TEMPLATE_CHECK_PARAMS ) macros.
    + The easiest way to generate the lambda expression is to use a Boost MPL placeholder expression of the form 'metafunction<_>'.
    + T = The enclosing type as a nullary metafunction.

    +

    returns = 'value' is true if the template exists within the enclosing type, otherwise 'value' is false.

    +
    +
    + + + +
    +
    +
    +PrevUpHomeNext +
    + + diff --git a/doc/html/tti/mf_has_template_check_p_id407168.html b/doc/html/tti/mf_has_template_check_p_id407168.html new file mode 100644 index 0000000..4befd09 --- /dev/null +++ b/doc/html/tti/mf_has_template_check_p_id407168.html @@ -0,0 +1,49 @@ + + + +Struct template mf_has_template_check_params + + + + + + + + +
    +
    +
    +PrevUpHomeNext +
    +
    +
    +
    +

    Struct template mf_has_template_check_params

    +

    tti::mf_has_template_check_params — A metafunction which checks whether a class template with its parameters exists within an enclosing type.

    +
    +

    Synopsis

    +
    // In header: <boost/tti/TTIntrospectionTemplate.hpp>
    +
    +template<typename HasTemplateCheckParams, typename T> 
    +struct mf_has_template_check_params {
    +};
    +
    +

    Description

    +

    This metafunction takes its enclosing type as nullary metafunctions whose typedef 'type' member is the actual type used.

    +

    The metafunction types and return:

    +

    HasTemplateCheckParams = a Boost MPL lambda expression using the metafunction generated from either the TTI_HAS_TEMPLATE_CHECK_PARAMS ( TTI_TRAIT_HAS_TEMPLATE_CHECK_PARAMS ) or TTI_VM_HAS_TEMPLATE_CHECK_PARAMS ( TTI_VM_TRAIT_HAS_TEMPLATE_CHECK_PARAMS ) macros.
    + The easiest way to generate the lambda expression is to use a Boost MPL placeholder expression of the form 'metafunction<_>'.
    + T = The enclosing type as a nullary metafunction.

    +

    returns = 'value' is true if the template exists within the enclosing type, otherwise 'value' is false.

    +
    +
    + + + +
    +
    +
    +PrevUpHomeNext +
    + + diff --git a/doc/html/tti/mf_has_template_check_p_id411538.html b/doc/html/tti/mf_has_template_check_p_id411538.html new file mode 100644 index 0000000..d4b4464 --- /dev/null +++ b/doc/html/tti/mf_has_template_check_p_id411538.html @@ -0,0 +1,49 @@ + + + +Struct template mf_has_template_check_params + + + + + + + + +
    +
    +
    +PrevUpHomeNext +
    +
    +
    +
    +

    Struct template mf_has_template_check_params

    +

    tti::mf_has_template_check_params — A metafunction which checks whether a class template with its parameters exists within an enclosing type.

    +
    +

    Synopsis

    +
    // In header: <boost/tti/TTIntrospectionTemplate.hpp>
    +
    +template<typename HasTemplateCheckParams, typename T> 
    +struct mf_has_template_check_params {
    +};
    +
    +

    Description

    +

    This metafunction takes its enclosing type as nullary metafunctions whose typedef 'type' member is the actual type used.

    +

    The metafunction types and return:

    +

    HasTemplateCheckParams = a Boost MPL lambda expression using the metafunction generated from either the TTI_HAS_TEMPLATE_CHECK_PARAMS ( TTI_TRAIT_HAS_TEMPLATE_CHECK_PARAMS ) or TTI_VM_HAS_TEMPLATE_CHECK_PARAMS ( TTI_VM_TRAIT_HAS_TEMPLATE_CHECK_PARAMS ) macros.
    + The easiest way to generate the lambda expression is to use a Boost MPL placeholder expression of the form 'metafunction<_>'. You can also use the metafunction class generated by either the TTI_MTFC_HAS_TEMPLATE_CHECK_PARAMS ( TTI_MTFC_TRAIT_HAS_TEMPLATE_CHECK_PARAMS ) macro or the TTI_VM_MTFC_HAS_TEMPLATE_CHECK_PARAMS ( TTI_VM_MTFC_TRAIT_HAS_TEMPLATE_CHECK_PARAMS ) macro.
    + T = The enclosing type as a nullary metafunction.

    +

    returns = 'value' is true if the template exists within the enclosing type, otherwise 'value' is false.

    +
    +
    + + + +
    +
    +
    +PrevUpHomeNext +
    + + diff --git a/doc/html/tti/mf_has_template_check_p_id413726.html b/doc/html/tti/mf_has_template_check_p_id413726.html new file mode 100644 index 0000000..d6a13e3 --- /dev/null +++ b/doc/html/tti/mf_has_template_check_p_id413726.html @@ -0,0 +1,49 @@ + + + +Struct template mf_has_template_check_params + + + + + + + + +
    +
    +
    +PrevUpHomeNext +
    +
    +
    +
    +

    Struct template mf_has_template_check_params

    +

    tti::mf_has_template_check_params — A metafunction which checks whether a class template with its parameters exists within an enclosing type.

    +
    +

    Synopsis

    +
    // In header: <boost/tti/TTIntrospectionTemplate.hpp>
    +
    +template<typename HasTemplateCheckParams, typename T> 
    +struct mf_has_template_check_params {
    +};
    +
    +

    Description

    +

    This metafunction takes its enclosing type as nullary metafunctions whose typedef 'type' member is the actual type used.

    +

    The metafunction types and return:

    +

    HasTemplateCheckParams = a Boost MPL lambda expression using the metafunction generated from either the TTI_HAS_TEMPLATE_CHECK_PARAMS ( TTI_TRAIT_HAS_TEMPLATE_CHECK_PARAMS ) or TTI_VM_HAS_TEMPLATE_CHECK_PARAMS ( TTI_VM_TRAIT_HAS_TEMPLATE_CHECK_PARAMS ) macros.
    + The easiest way to generate the lambda expression is to use a Boost MPL placeholder expression of the form 'metafunction<_>'. You can also use the metafunction class generated by either the TTI_MTFC_HAS_TEMPLATE_CHECK_PARAMS ( TTI_MTFC_TRAIT_HAS_TEMPLATE_CHECK_PARAMS ) macro or the TTI_VM_MTFC_HAS_TEMPLATE_CHECK_PARAMS ( TTI_VM_MTFC_TRAIT_HAS_TEMPLATE_CHECK_PARAMS ) macro.
    + T = The enclosing type as a nullary metafunction.

    +

    returns = 'value' is true if the template exists within the enclosing type, otherwise 'value' is false.

    +
    +
    + + + +
    +
    +
    +PrevUpHomeNext +
    + + diff --git a/doc/html/tti/mf_has_template_check_p_id414759.html b/doc/html/tti/mf_has_template_check_p_id414759.html new file mode 100644 index 0000000..896fd69 --- /dev/null +++ b/doc/html/tti/mf_has_template_check_p_id414759.html @@ -0,0 +1,49 @@ + + + +Struct template mf_has_template_check_params + + + + + + + + +
    +
    +
    +PrevUpHomeNext +
    +
    +
    +
    +

    Struct template mf_has_template_check_params

    +

    tti::mf_has_template_check_params — A metafunction which checks whether a class template with its parameters exists within an enclosing type.

    +
    +

    Synopsis

    +
    // In header: <boost/tti/TTIntrospectionTemplate.hpp>
    +
    +template<typename HasTemplateCheckParams, typename T> 
    +struct mf_has_template_check_params {
    +};
    +
    +

    Description

    +

    This metafunction takes its enclosing type as nullary metafunctions whose typedef 'type' member is the actual type used.

    +

    The metafunction types and return:

    +

    HasTemplateCheckParams = a Boost MPL lambda expression using the metafunction generated from either the TTI_HAS_TEMPLATE_CHECK_PARAMS ( TTI_TRAIT_HAS_TEMPLATE_CHECK_PARAMS ) or TTI_VM_HAS_TEMPLATE_CHECK_PARAMS ( TTI_VM_TRAIT_HAS_TEMPLATE_CHECK_PARAMS ) macros.
    + The easiest way to generate the lambda expression is to use a Boost MPL placeholder expression of the form 'metafunction<_>'.
    + T = The enclosing type as a nullary metafunction.

    +

    returns = 'value' is true if the template exists within the enclosing type, otherwise 'value' is false.

    +
    +
    + + + +
    +
    +
    +PrevUpHomeNext +
    + + diff --git a/doc/html/tti/mf_has_template_check_p_id423552.html b/doc/html/tti/mf_has_template_check_p_id423552.html new file mode 100644 index 0000000..845ec82 --- /dev/null +++ b/doc/html/tti/mf_has_template_check_p_id423552.html @@ -0,0 +1,49 @@ + + + +Struct template mf_has_template_check_params + + + + + + + + +
    +
    +
    +PrevUpHomeNext +
    +
    +
    +
    +

    Struct template mf_has_template_check_params

    +

    tti::mf_has_template_check_params — A metafunction which checks whether a class template with its parameters exists within an enclosing type.

    +
    +

    Synopsis

    +
    // In header: <boost/tti/TTIntrospectionTemplate.hpp>
    +
    +template<typename HasTemplateCheckParams, typename T> 
    +struct mf_has_template_check_params {
    +};
    +
    +

    Description

    +

    This metafunction takes its enclosing type as nullary metafunctions whose typedef 'type' member is the actual type used.

    +

    The metafunction types and return:

    +

    HasTemplateCheckParams = a Boost MPL lambda expression using the metafunction generated from either the TTI_HAS_TEMPLATE_CHECK_PARAMS ( TTI_TRAIT_HAS_TEMPLATE_CHECK_PARAMS ) or TTI_VM_HAS_TEMPLATE_CHECK_PARAMS ( TTI_VM_TRAIT_HAS_TEMPLATE_CHECK_PARAMS ) macros.
    + The easiest way to generate the lambda expression is to use a Boost MPL placeholder expression of the form 'metafunction<_>'.
    + T = The enclosing type as a nullary metafunction.

    +

    returns = 'value' is true if the template exists within the enclosing type, otherwise 'value' is false.

    +
    +
    + + + +
    +
    +
    +PrevUpHomeNext +
    + + diff --git a/doc/html/tti/mf_has_template_check_p_id427769.html b/doc/html/tti/mf_has_template_check_p_id427769.html new file mode 100644 index 0000000..84a2f00 --- /dev/null +++ b/doc/html/tti/mf_has_template_check_p_id427769.html @@ -0,0 +1,49 @@ + + + +Struct template mf_has_template_check_params + + + + + + + + +
    +
    +
    +PrevUpHomeNext +
    +
    +
    +
    +

    Struct template mf_has_template_check_params

    +

    tti::mf_has_template_check_params — A metafunction which checks whether a class template with its parameters exists within an enclosing type.

    +
    +

    Synopsis

    +
    // In header: <boost/tti/TTIntrospectionTemplate.hpp>
    +
    +template<typename HasTemplateCheckParams, typename T> 
    +struct mf_has_template_check_params {
    +};
    +
    +

    Description

    +

    This metafunction takes its enclosing type as nullary metafunctions whose typedef 'type' member is the actual type used.

    +

    The metafunction types and return:

    +

    HasTemplateCheckParams = a Boost MPL lambda expression using the metafunction generated from either the TTI_HAS_TEMPLATE_CHECK_PARAMS ( TTI_TRAIT_HAS_TEMPLATE_CHECK_PARAMS ) or TTI_VM_HAS_TEMPLATE_CHECK_PARAMS ( TTI_VM_TRAIT_HAS_TEMPLATE_CHECK_PARAMS ) macros.
    + The easiest way to generate the lambda expression is to use a Boost MPL placeholder expression of the form 'metafunction<_>'.
    + T = The enclosing type as a nullary metafunction.

    +

    returns = 'value' is true if the template exists within the enclosing type, otherwise 'value' is false.

    +
    +
    + + + +
    +
    +
    +PrevUpHomeNext +
    + + diff --git a/doc/html/tti/mf_has_type.html b/doc/html/tti/mf_has_type.html index 2c33f1d..b102522 100644 --- a/doc/html/tti/mf_has_type.html +++ b/doc/html/tti/mf_has_type.html @@ -29,11 +29,11 @@ struct mf_has_type { };
    -

    Description

    +

    Description

    This metafunction takes its specific types as nullary metafunctions whose typedef 'type' member is the actual type used.

    The metafunction types and return:

    HasType = a Boost MPL lambda expression using the metafunction generated from the TTI_HAS_TYPE ( or TTI_TRAIT_HAS_TYPE ) macro.
    - The easiest way to generate the lambda expression is to use a Boost MPL placeholder expression of the form 'metafunction<_>' ( or optionally 'metafunction<_,_>' ).
    + The easiest way to generate the lambda expression is to use a Boost MPL placeholder expression of the form 'metafunction<_>' ( or optionally 'metafunction<_,_>' ). You can also use the metafunction class generated by the TTI_MTFC_HAS_TYPE ( or TTI_MTFC_TRAIT_HAS_TYPE ) macro.
    T = the enclosing type as a nullary metafunction.
    U = the type of the inner type as a nullary metafunction, as an optional parameter.

    returns = 'value' is true if the type exists within the enclosing type and, if type U is specified, the type is the same as the type U, otherwise 'value' is false.

    diff --git a/doc/html/tti/mf_member_type.html b/doc/html/tti/mf_member_type.html index a0261a6..8ad1d5d 100644 --- a/doc/html/tti/mf_member_type.html +++ b/doc/html/tti/mf_member_type.html @@ -28,11 +28,11 @@ struct mf_member_type { };
    -

    Description

    +

    Description

    This metafunction takes its enclosing type as nullary metafunctions whose typedef 'type' member is the actual type used.

    The metafunction types and return:

    MemberType = a Boost MPL lambda expression using the metafunction generated from the TTI_MEMBER_TYPE ( or TTI_TRAIT_MEMBER_TYPE ) macro.
    - The easiest way to generate the lambda expression is to use a Boost MPL placeholder expression of the form 'metafunction<_>'.
    + The easiest way to generate the lambda expression is to use a Boost MPL placeholder expression of the form 'metafunction<_>'. You can also use the metafunction class generated by the TTI_MTFC_MEMBER_TYPE ( or TTI_MTFC_TRAIT_MEMBER_TYPE ) macro.
    T = the enclosing type as a nullary metafunction.

    returns = 'type' is the inner type of the 'name' in TTI_MEMBER_TYPE ( or TTI_TRAIT_MEMBER_TYPE ) if the inner type exists within the enclosing type, else 'type' is an unspecified type.
    'valid' is true if the inner type of 'name' exists within the enclosing type, else 'valid' is false.

    diff --git a/doc/html/tti/mf_valid_member_type.html b/doc/html/tti/mf_valid_member_type.html index 57ead09..1773a03 100644 --- a/doc/html/tti/mf_valid_member_type.html +++ b/doc/html/tti/mf_valid_member_type.html @@ -28,7 +28,7 @@ struct mf_valid_member_type { };
    -

    Description

    +

    Description

    The metafunction types and return:

    T = the nullary metafunction from invoking the macro metafunction generated by TTI_MEMBER_TYPE ( TTI_TRAIT_MEMBER_TYPE ) or from invoking tti::mf_member_type.

    returns = 'value' is true if the type is valid, otherwise 'value' is false.

    diff --git a/doc/html/tti/valid_member_type.html b/doc/html/tti/valid_member_type.html index a1e4908..b75285a 100644 --- a/doc/html/tti/valid_member_type.html +++ b/doc/html/tti/valid_member_type.html @@ -28,7 +28,7 @@ struct valid_member_type { };
    -

    Description

    +

    Description

    The metafunction types and return:

    T = returned inner 'type' from invoking the macro metafunction generated by TTI_MEMBER_TYPE ( TTI_TRAIT_MEMBER_TYPE ) or from invoking tti::mf_member_type.

    returns = 'value' is true if the type is valid, otherwise 'value' is false.

    diff --git a/doc/html/typetraitsintrospection_reference.html b/doc/html/typetraitsintrospection_reference.html index 7afba3b..0a8c3ed 100644 --- a/doc/html/typetraitsintrospection_reference.html +++ b/doc/html/typetraitsintrospection_reference.html @@ -32,23 +32,41 @@
     
     TTI_TRAIT_HAS_TYPE(trait, name)
    +TTI_MTFC_TRAIT_HAS_TYPE(trait, name)
     TTI_HAS_TYPE(name)
    +TTI_MTFC_HAS_TYPE(name)
     TTI_TRAIT_MEMBER_TYPE(trait, name)
    +TTI_MTFC_TRAIT_MEMBER_TYPE(trait, name)
     TTI_MEMBER_TYPE(name)
    +TTI_MTFC_MEMBER_TYPE(name)
     TTI_TRAIT_HAS_TEMPLATE(trait, name)
    +TTI_MTFC_TRAIT_HAS_TEMPLATE(trait, name)
     TTI_HAS_TEMPLATE(name)
    +TTI_MTFC_HAS_TEMPLATE(name)
     TTI_TRAIT_HAS_TEMPLATE_CHECK_PARAMS(trait, name, tpSeq)
    +TTI_MTFC_TRAIT_HAS_TEMPLATE_CHECK_PARAMS(trait, name, tpSeq)
     TTI_HAS_TEMPLATE_CHECK_PARAMS(name, tpSeq)
    +TTI_MTFC_HAS_TEMPLATE_CHECK_PARAMS(name, tpSeq)
     TTI_TRAIT_HAS_MEMBER(trait, name)
    +TTI_MTFC_TRAIT_HAS_MEMBER(trait, name)
     TTI_HAS_MEMBER(name)
    +TTI_MTFC_HAS_MEMBER(name)
     TTI_TRAIT_HAS_MEMBER_FUNCTION(trait, name)
    +TTI_MTFC_TRAIT_HAS_MEMBER_FUNCTION(trait, name)
     TTI_HAS_MEMBER_FUNCTION(name)
    +TTI_MTFC_HAS_MEMBER_FUNCTION(name)
     TTI_TRAIT_HAS_MEMBER_DATA(trait, name)
    +TTI_MTFC_TRAIT_HAS_MEMBER_DATA(trait, name)
     TTI_HAS_MEMBER_DATA(name)
    +TTI_MTFC_HAS_MEMBER_DATA(name)
     TTI_TRAIT_HAS_STATIC_MEMBER(trait, name)
    +TTI_MTFC_TRAIT_HAS_STATIC_MEMBER(trait, name)
     TTI_HAS_STATIC_MEMBER(name)
    +TTI_MTFC_HAS_STATIC_MEMBER(name)
     TTI_TRAIT_HAS_STATIC_MEMBER_FUNCTION(trait, name)
    -TTI_HAS_STATIC_MEMBER_FUNCTION(name)
    +TTI_MTFC_TRAIT_HAS_STATIC_MEMBER_FUNCTION(trait, name) +TTI_HAS_STATIC_MEMBER_FUNCTION(name) +TTI_MTFC_HAS_STATIC_MEMBER_FUNCTION(name)
    namespace tti {
       template<typename T> struct valid_member_type;
       template<typename T> struct mf_valid_member_type;
    @@ -66,7 +84,7 @@
       template<typename HasStaticMemberFunction, typename T, typename R, 
                typename FS = boost::mpl::vector<>, 
                typename TAG = boost::function_types::null_tag> 
    -    struct mf_has_static_member_function;
    +    struct mf_has_static_member_function;
       template<typename HasStaticMember, typename T, typename R> 
         struct mf_has_static_data;
     }
    diff --git a/include/boost/tti/TTIntrospection.hpp b/include/boost/tti/TTIntrospection.hpp index 2a64c7a..f5d8f78 100644 --- a/include/boost/tti/TTIntrospection.hpp +++ b/include/boost/tti/TTIntrospection.hpp @@ -284,7 +284,7 @@ namespace tti \ name = the name of the inner type. - returns = a metafunction class called "tti::member_type_name" where 'name' is the macro parameter. + returns = a metafunction class called "tti::mtfc_member_type_name" where 'name' is the macro parameter. The metafunction class's 'apply' metafunction types and return: @@ -406,7 +406,7 @@ namespace tti \ name = the name of the inner template. - returns = a metafunction class called "tti::has_template_name" where 'name' is the macro parameter. + returns = a metafunction class called "tti::mtfc_has_template_name" where 'name' is the macro parameter. The metafunction class's 'apply' metafunction types and return: @@ -535,7 +535,7 @@ namespace tti \ Each part of the template parameters separated by a comma ( , ) is put in a separate sequence element. - returns = a metafunction class called "tti::has_template_check_params_name" where 'name' is the macro parameter. + returns = a metafunction class called "tti::mtfc_has_template_check_params_name" where 'name' is the macro parameter. The metafunction class's 'apply' metafunction types and return: @@ -588,6 +588,43 @@ namespace tti \ } \ /**/ +/// Expands to a metafunction class which tests whether a member data or member function with a particular name and type exists. +/** + + trait = the name of the metafunction class within the tti namespace.
    + name = the name of the inner member. + + returns = a metafunction class called "tti::trait" where 'trait' is the macro parameter.
    + + The metafunction class's 'apply' metafunction types and return: + + T = the type, in the form of a member data pointer or member function pointer, + in which to look for our 'name'.
    + returns = 'value' is true if the 'name' exists, with the appropriate type, + otherwise 'value' is false. + +*/ +#define TTI_MTFC_TRAIT_HAS_MEMBER(trait,name) \ +namespace tti \ + { \ + namespace detail \ + { \ + TTI_DETAIL_TRAIT_HAS_MEMBER(trait,name) \ + } \ + struct trait \ + { \ + template \ + struct apply \ + { \ + typedef typename detail::trait::type type; \ + \ + BOOST_STATIC_CONSTANT(bool,value=type::value); \ + \ + }; \ + }; \ + } \ +/**/ + /// Expands to a metafunction which tests whether a member data or member function with a particular name and type exists. /** @@ -611,6 +648,29 @@ namespace tti \ ) \ /**/ +/// Expands to a metafunction class which tests whether a member data or member function with a particular name and type exists. +/** + + name = the name of the inner member. + + returns = a metafunction class called "tti::mtfc_has_member_name" where 'name' is the macro parameter. + + The metafunction class's 'apply' metafunction types and return: + + T = the type, in the form of a member data pointer or member function pointer, + in which to look for our 'name'.
    + returns = 'value' is true if the 'name' exists, with the appropriate type, + otherwise 'value' is false. + +*/ +#define TTI_MTFC_HAS_MEMBER(name) \ + TTI_MTFC_TRAIT_HAS_MEMBER \ + ( \ + BOOST_PP_CAT(mtfc_has_member_,name), \ + name \ + ) \ +/**/ + /// Expands to a metafunction which tests whether a member function with a particular name and signature exists. /** @@ -714,7 +774,7 @@ namespace tti \ name = the name of the inner member. - returns = a metafunction class called "tti::has_member_function_name" where 'name' is the macro parameter. + returns = a metafunction class called "tti::mtfc_has_member_function_name" where 'name' is the macro parameter. The metafunction class's 'apply' metafunction types and return: @@ -831,7 +891,7 @@ namespace tti \ name = the name of the inner member. - returns = a metafunction class called "tti::has_member_data_name" where 'name' is the macro parameter. + returns = a metafunction class called "tti::mtfc_has_member_data_name" where 'name' is the macro parameter. The metafunction class's 'apply' metafunction types and return: @@ -956,7 +1016,7 @@ namespace tti \ name = the name of the inner member. - returns = a metafunction class called "tti::has_static_member_name" where 'name' is the macro parameter.
    + returns = a metafunction class called "tti::mtfc_has_static_member_name" where 'name' is the macro parameter.
    The metafunction class's 'apply' metafunction types and return: @@ -1080,7 +1140,7 @@ namespace tti \ name = the name of the inner member. - returns = a metafunction class called "tti::has_static_member_function_name" where 'name' is the macro parameter. + returns = a metafunction class called "tti::mtfc_has_static_member_function_name" where 'name' is the macro parameter. The metafunction class's 'apply' metafunction types and return: @@ -1163,7 +1223,8 @@ namespace tti The metafunction types and return: HasType = a Boost MPL lambda expression using the metafunction generated from the TTI_HAS_TYPE ( or TTI_TRAIT_HAS_TYPE ) macro.
    - The easiest way to generate the lambda expression is to use a Boost MPL placeholder expression of the form 'metafunction<_>' ( or optionally 'metafunction<_,_>' ).
    + The easiest way to generate the lambda expression is to use a Boost MPL placeholder expression of the form 'metafunction\<_\>' ( or optionally 'metafunction\<_,_\>' ). + You can also use the metafunction class generated by the TTI_MTFC_HAS_TYPE ( or TTI_MTFC_TRAIT_HAS_TYPE ) macro.
    T = the enclosing type as a nullary metafunction.
    U = the type of the inner type as a nullary metafunction, as an optional parameter. @@ -1196,7 +1257,8 @@ namespace tti The metafunction types and return: MemberType = a Boost MPL lambda expression using the metafunction generated from the TTI_MEMBER_TYPE ( or TTI_TRAIT_MEMBER_TYPE ) macro.
    - The easiest way to generate the lambda expression is to use a Boost MPL placeholder expression of the form 'metafunction<_>'.
    + The easiest way to generate the lambda expression is to use a Boost MPL placeholder expression of the form 'metafunction\<_\>'. + You can also use the metafunction class generated by the TTI_MTFC_MEMBER_TYPE ( or TTI_MTFC_TRAIT_MEMBER_TYPE ) macro.
    T = the enclosing type as a nullary metafunction. returns = 'type' is the inner type of the 'name' in TTI_MEMBER_TYPE ( or TTI_TRAIT_MEMBER_TYPE ) @@ -1238,7 +1300,8 @@ namespace tti The metafunction types and return: HasTemplate = a Boost MPL lambda expression using the metafunction generated from the TTI_HAS_TEMPLATE ( TTI_TRAIT_HAS_TEMPLATE ) macro.
    - The easiest way to generate the lambda expression is to use a Boost MPL placeholder expression of the form 'metafunction<_>'.
    + The easiest way to generate the lambda expression is to use a Boost MPL placeholder expression of the form 'metafunction\<_\>'. + You can also use the metafunction class generated by the TTI_MTFC_HAS_TEMPLATE ( TTI_MTFC_TRAIT_HAS_TEMPLATE ) macro.
    T = the enclosing type as a nullary metafunction. returns = 'value' is true if the template exists within the enclosing type, @@ -1267,7 +1330,8 @@ namespace tti The metafunction types and return: HasMemberFunction = a Boost MPL lambda expression using the metafunction generated from the TTI_HAS_MEMBER_FUNCTION ( or TTI_TRAIT_HAS_MEMBER_FUNCTION ) macro.
    - The easiest way to generate the lambda expression is to use a Boost MPL placeholder expression of the form 'metafunction<_,_> ( or optionally 'metafunction<_,_,_> or ' 'metafunction<_,_,_,_> )'.
    + The easiest way to generate the lambda expression is to use a Boost MPL placeholder expression of the form 'metafunction\<_,_\> ( or optionally 'metafunction\<_,_,_\> or ' 'metafunction\<_,_,_,_\> )'. + You can also use the metafunction class generated by the TTI_MTFC_HAS_MEMBER_FUNCTION ( or TTI_MTFC_TRAIT_HAS_MEMBER_FUNCTION ) macro.
    T = the enclosing type as a nullary metafunction.
    R = the return type of the member function as a nullary metafunction.
    FS = an optional parameter which is the parameters of the member function, each as a nullary metafunction, as a boost::mpl forward sequence.
    @@ -1307,7 +1371,8 @@ namespace tti The metafunction types and return: HasMemberData = a Boost MPL lambda expression using the metafunction generated from the TTI_HAS_MEMBER_DATA ( or TTI_TRAIT_HAS_MEMBER_DATA ) macro.
    - The easiest way to generate the lambda expression is to use a Boost MPL placeholder expression of the form 'metafunction<_,_>'.
    + The easiest way to generate the lambda expression is to use a Boost MPL placeholder expression of the form 'metafunction\<_,_\>'. + You can also use the metafunction class generated by the TTI_MTFC_HAS_MEMBER_DATA ( or TTI_MTFC_TRAIT_HAS_MEMBER_DATA ) macro.
    T = the enclosing type as a nullary metafunction.
    R = the type of the member data as a nullary metafunction. @@ -1339,7 +1404,8 @@ namespace tti The metafunction types and return: HasStaticMemberFunction = a Boost MPL lambda expression using the metafunction generated from the TTI_HAS_STATIC_MEMBER_FUNCTION ( or TTI_TRAIT_HAS_STATIC_MEMBER_FUNCTION ) macro.
    - The easiest way to generate the lambda expression is to use a Boost MPL placeholder expression of the form 'metafunction<_,_> ( or optionally 'metafunction<_,_,_> or ' 'metafunction<_,_,_,_> )'.
    + The easiest way to generate the lambda expression is to use a Boost MPL placeholder expression of the form 'metafunction\<_,_\> ( or optionally 'metafunction\<_,_,_\> or ' 'metafunction\<_,_,_,_\> )'. + You can also use the metafunction class generated by the TTI_MTFC_HAS_STATIC_MEMBER_FUNCTION ( or TTI_MTFC_TRAIT_HAS_STATIC_MEMBER_FUNCTION ) macro.
    T = the enclosing type as a nullary metafunction.
    R = the return type of the static member function as a nullary metafunction.
    FS = an optional parameter which is the parameters of the static member function, each as a nullary metafunction, as a boost::mpl forward sequence.
    @@ -1377,7 +1443,8 @@ namespace tti The metafunction types and return: HasStaticMember = a Boost MPL lambda expression using the metafunction generated from the TTI_HAS_STATIC_MEMBER ( or TTI_TRAIT_HAS_STATIC_MEMBER ) macro.
    - The easiest way to generate the lambda expression is to use a Boost MPL placeholder expression of the form 'metafunction<_,_>'.
    + The easiest way to generate the lambda expression is to use a Boost MPL placeholder expression of the form 'metafunction\<_,_\>'. + You can also use the metafunction class generated by the TTI_MTFC_HAS_STATIC_MEMBER ( or TTI_MTFC_TRAIT_HAS_STATIC_MEMBER ) macro.
    T = the enclosing type as a nullary metafunction.
    R = the type of the static member data as a nullary metafunction. diff --git a/include/boost/tti/TTIntrospectionTemplate.hpp b/include/boost/tti/TTIntrospectionTemplate.hpp index 3c37de8..502de3a 100644 --- a/include/boost/tti/TTIntrospectionTemplate.hpp +++ b/include/boost/tti/TTIntrospectionTemplate.hpp @@ -27,7 +27,8 @@ namespace tti HasTemplateCheckParams = a Boost MPL lambda expression using the metafunction generated from either the TTI_HAS_TEMPLATE_CHECK_PARAMS ( TTI_TRAIT_HAS_TEMPLATE_CHECK_PARAMS ) or TTI_VM_HAS_TEMPLATE_CHECK_PARAMS ( TTI_VM_TRAIT_HAS_TEMPLATE_CHECK_PARAMS ) macros.
    - The easiest way to generate the lambda expression is to use a Boost MPL placeholder expression of the form 'metafunction<_>'.
    + The easiest way to generate the lambda expression is to use a Boost MPL placeholder expression of the form 'metafunction\<_\>'. + You can also use the metafunction class generated by either the TTI_MTFC_HAS_TEMPLATE_CHECK_PARAMS ( TTI_MTFC_TRAIT_HAS_TEMPLATE_CHECK_PARAMS ) macro or the TTI_VM_MTFC_HAS_TEMPLATE_CHECK_PARAMS ( TTI_VM_MTFC_TRAIT_HAS_TEMPLATE_CHECK_PARAMS ) macro.
    T = The enclosing type as a nullary metafunction. returns = 'value' is true if the template exists within the enclosing type,