123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245 |
- [/
- (C) Copyright Edward Diener 2011,2012
- Distributed under the Boost Software License, Version 1.0.
- (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt).
- ]
- [section:tti_detail Macro Metafunctions]
- The TTI library uses macros to create metafunctions, in the current scope,
- for introspecting an inner element by name. Each macro for a particular type of inner
- element has two forms, the simple one where the first macro parameter designating the
- 'name' of the inner element is used to create the name of the metafunction, and the
- complex one where the first macro parameter, called 'trait', designates
- the name of the metafunction and the second macro parameter designates the 'name' to be
- introspected. Other than that difference, the two forms of the macro create metafunctions
- which have the exact same functionality.
- To use these metafunctions you can include the main general header file 'boost/tti/tti.hpp',
- unless otherwise noted. Alternatively you can include a specific header file as
- given in the table below.
- A table of these macros is given, based on the inner element whose
- existence the metaprogrammer is introspecting. More detailed explanations
- and examples for each of the macro metafunctions will follow this
- section in the documentation. The actual syntax for each macro metafunction
- can be found in the reference section, and examples of usage for all the
- macro metafunctions can be found in the
- [link sectti_usingMM "Using the Macro Metafunctions"] section.
- In the Template column only the name generated by the simple form
- of the template is given since the name generated by the complex form is always 'trait'
- where 'trait' is the first parameter to the corresponding complex form macro.
- All of the introspecting metafunctions in the table below return a boolean constant
- called 'value', which specifies whether or not the inner element exists. All of the
- metafunctions also have a nested type called 'type', which for each one is the type
- of the boolean constant value. This is always boost::mpl::bool_.
- [table:tbmacros TTI Macro Metafunctions
- [
- [Inner Element]
- [Macro]
- [Template]
- [Specific Header File]
- ]
- [
- [Type]
- [
- [macroref BOOST_TTI_HAS_TYPE](name)
- ]
- [
- `has_type_'name'`
-
- class TTI_T = enclosing type
- ]
- [[headerref boost/tti/has_type.hpp `has_type.hpp`]]
- ]
- [
- [Type with lambda expression]
- [
- [macroref BOOST_TTI_HAS_TYPE](name)
- ]
- [
- `has_type_'name'`
-
- class TTI_T = enclosing type
-
- class TTI_U = lambda expression invoked with the inner type and returning a boolean constant
- ]
- [[headerref boost/tti/has_type.hpp `has_type.hpp`]]
- ]
- [
- [Class Template ( using variadic macros )]
- [
- [macroref BOOST_TTI_HAS_TEMPLATE](name)
- ]
- [
- `has_template_'name'`
-
- class TTI_T = enclosing type
-
- All of the template parameters must be template type parameters ( 'class' or 'typename' parameters )
- ]
- [[headerref boost/tti/has_template.hpp `has_template.hpp`]]
- ]
- [
- [Class Template ( not using variadic macros )]
- [
- [macroref BOOST_TTI_HAS_TEMPLATE](name,BOOST_PP_NIL)
- ]
- [
- `has_template_'name'`
-
- class TTI_T = enclosing type
-
- All of the template parameters must be template type parameters ( 'class' or 'typename' parameters )
- ]
- [[headerref boost/tti/has_template.hpp `has_template.hpp`]]
- ]
- [
- [Class Template with params ( using variadic macros )]
- [
- [macroref BOOST_TTI_HAS_TEMPLATE](name,...[footnote The template parameters as variadic data.])
- ]
- [
- `has_template_'name'`
-
- class TTI_T = enclosing type
- ]
- [[headerref boost/tti/has_template.hpp `has_template.hpp`]]
- ]
- [
- [Class Template with params]
- [
- [macroref BOOST_TTI_HAS_TEMPLATE](name,ppArray[footnote The template parameters as the tuple part of the PP array.])
- ]
- [
- `has_template_'name'`
-
- class TTI_T = enclosing type
- ]
- [[headerref boost/tti/has_template.hpp `has_template.hpp`]]
- ]
- [
- [Member data]
- [
- [macroref BOOST_TTI_HAS_MEMBER_DATA](name)
- ]
- [
- `has_member_data_'name'`
-
- class TTI_T = enclosing type
- OR
- pointer to member data ( 'MemberData_Type Enclosing_Type::*' )
-
- class TTI_R = (optional) data type.
- If the first parameter is the pointer to member data this must not be specified.
- ]
- [[headerref boost/tti/has_member_data.hpp `has_member_data.hpp`]]
- ]
- [
- [Member function]
- [
- [macroref BOOST_TTI_HAS_MEMBER_FUNCTION](name)
- ]
- [
- `has_member_function_'name'`
-
- class TTI_T = enclosing type
- OR
- pointer to member function
- ( 'Return_Type Enclosing_Type::* ( Zero or more comma-separated parameter types )' )
-
- class TTI_R = (optional) return type if the first parameter is the enclosing type.
- If the first parameter is the pointer to member function this must not be specified.
-
- class TTI_FS = (optional) function parameter types as a Boost MPL forward sequence.
- If the first parameter is the pointer to member function this must not be specified.
- If there are no function parameters this does not have to be specified.
- Defaults to boost::mpl::vector<>.
-
- class TTI_TAG = (optional) Boost `function_types` tag type.
- If the first parameter is the pointer to member function this must not be specified.
- Defaults to `boost::function_types::null_tag`.
- ]
- [[headerref boost/tti/has_member_function.hpp `has_member_function.hpp`]]
- ]
- [
- [Static member data]
- [
- [macroref BOOST_TTI_HAS_STATIC_MEMBER_DATA](name)
- ]
- [
- `has_static_member_data_'name'`
-
- class TTI_T = enclosing type
-
- class TTI_Type = data type
- ]
- [[headerref boost/tti/has_static_member_data.hpp `has_static_member_data.hpp`]]
- ]
- [
- [Static member function]
- [
- [macroref BOOST_TTI_HAS_STATIC_MEMBER_FUNCTION](name)
- ]
- [
- `has_static_member_function_'name'`
-
- class TTI_T = enclosing type
-
- class TTI_R = return type
- OR
- function type ( 'Return_Type (Zero or more comma-separated parameter types)' )
-
- class TTI_FS = (optional) function parameter types as a Boost MPL forward sequence.
- If the second parameter is the function type this must not be specified.
- If there are no function parameters, this does not have to be specified.
- Defaults to boost::mpl::vector<>.
-
- class TTI_TAG = (optional) Boost `function_types` tag type.
- If the second parameter is the function type this must not be specified.
- Defaults to `boost::function_types::null_tag`.
- ]
- [[headerref boost/tti/has_static_member_function.hpp `has_static_member_function.hpp`]]
- ]
- [
- [Data, either member data or static member data]
- [
- [macroref BOOST_TTI_HAS_DATA](name)
- ]
- [
- `has_data_'name'`
-
- class TTI_T = enclosing type
-
- class TTI_Type = data type
- ]
- [[headerref boost/tti/has_data.hpp `has_data.hpp`]]
- ]
- [
- [Function, either member function or static member function]
- [
- [macroref BOOST_TTI_HAS_FUNCTION](name)
- ]
- [
- `has_function_'name'`
-
- class TTI_T = enclosing type
-
- class TTI_R = return type
-
- class TTI_FS = (optional) function parameter types as a Boost MPL forward sequence.
- If there are no function parameters, this does not have to be specified.
- Defaults to boost::mpl::vector<>.
-
- class TTI_TAG = (optional) Boost `function_types` tag type.
- Defaults to `boost::function_types::null_tag`.
- ]
- [[headerref boost/tti/has_function.hpp `has_function.hpp`]]
- ]
- ]
- [endsect]
|