Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r81378 - in trunk: boost/tti libs/tti/doc
From: eldiener_at_[hidden]
Date: 2012-11-16 20:50:59


Author: eldiener
Date: 2012-11-16 20:50:58 EST (Fri, 16 Nov 2012)
New Revision: 81378
URL: http://svn.boost.org/trac/boost/changeset/81378

Log:
Updated doc
Text files modified:
   trunk/boost/tti/has_template.hpp | 116 ++++++++++++++++++++++++++++++++++++++-
   trunk/libs/tti/doc/tti_detail_has_template.qbk | 16 ++--
   2 files changed, 121 insertions(+), 11 deletions(-)

Modified: trunk/boost/tti/has_template.hpp
==============================================================================
--- trunk/boost/tti/has_template.hpp (original)
+++ trunk/boost/tti/has_template.hpp 2012-11-16 20:50:58 EST (Fri, 16 Nov 2012)
@@ -157,7 +157,7 @@
     generates a metafunction called "has_template_'name'" where 'name' is the first variadic parameter.
     
               template<class TTI_T>
- struct trait
+ struct has_template_'name'
                 {
                 static const value = unspecified;
                 typedef mpl::bool_<true-or-false> type;
@@ -218,6 +218,62 @@
 #include <boost/tti/detail/dtemplate.hpp>
 #include <boost/tti/detail/dtemplate_params.hpp>
 
+/// Expands to a metafunction which tests whether an inner class template with a particular name exists.
+/**
+
+ trait = the name of the metafunction.
+ name = the inner class template name.
+ params = If the parameter is BOOST_PP_NIL the inner class template
+ being introspected must be all template type parameters ( template parameters
+ starting with `class` or `typename` ) and any number of template type parameters
+ can occur.
+
+ If the parameter is a Boost preprocessor library array, then the inner class
+ template must have its template parameters matching the sequence in the tuple portion
+ of the Boost PP array.
+
+ Otherwise a compiler error occurs.
+
+ generates a metafunction called "trait" where 'trait' is the first macro parameter.
+
+ template<class TTI_T>
+ struct trait
+ {
+ static const value = unspecified;
+ typedef mpl::bool_<true-or-false> type;
+ };
+
+ The metafunction types and return:
+
+ TTI_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.
+
+ Examples:
+
+ 1) Search for an inner class template called 'MyTemplate', with all template type parameters,
+ nested within the class 'MyClass' using a metafunction name of 'MyMeta'.
+
+ BOOST_TTI_TRAIT_HAS_TEMPLATE(MyMeta,MyTemplate,BOOST_PP_NIL)
+
+ MyMeta<MyClass>::value
+
+ is a compile time boolean constant which is either 'true' or 'false'
+ if the nested template exists.
+
+ 2) Search for an inner class template called 'MyTemplate', with template parameters
+ of 'class T,int x,template<class> class U', nested within the class 'MyClass'
+ using a metafunction name of 'MyMeta'.
+
+ BOOST_TTI_TRAIT_HAS_TEMPLATE(MyMeta,MyTemplate,(3,(class,int,template<class> class)))
+
+ MyMeta<MyClass>::value
+
+ is a compile time boolean constant which is either 'true' or 'false'
+ if the nested template exists.
+
+*/
 #define BOOST_TTI_TRAIT_HAS_TEMPLATE(trait,name,params) \
   BOOST_PP_IIF \
     ( \
@@ -228,6 +284,60 @@
     (trait,name,params) \
 /**/
   
+/// Expands to a metafunction which tests whether an inner class template with a particular name exists.
+/**
+
+ name = the inner class template name.
+ params = If the parameter is BOOST_PP_NIL the inner class template
+ being introspected must be all template type parameters ( template parameters
+ starting with `class` or `typename` ) and any number of template type parameters
+ can occur.
+
+ If the parameter is a Boost preprocessor library array, then the inner class
+ template must have its template parameters matching the sequence in the tuple portion
+ of the Boost PP array.
+
+ Otherwise a compiler error occurs.
+
+ generates a metafunction called "trait" where 'trait' is the first macro parameter.
+
+ template<class TTI_T>
+ struct trait
+ {
+ static const value = unspecified;
+ typedef mpl::bool_<true-or-false> type;
+ };
+
+ The metafunction types and return:
+
+ TTI_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.
+
+ Examples:
+
+ 1) Search for an inner class template called 'MyTemplate', with all template type parameters,
+ nested within the class 'MyClass'.
+
+ BOOST_TTI_HAS_TEMPLATE(MyTemplate,BOOST_PP_NIL)
+
+ has_template_MyTemplate<MyClass>::value
+
+ is a compile time boolean constant which is either 'true' or 'false'
+ if the nested template exists.
+
+ 2) Search for an inner class template called 'MyTemplate' with template parameters
+ of 'class T,int x,template<class> class U' nested within the class 'MyClass'.
+
+ BOOST_TTI_HAS_TEMPLATE(MyTemplate,(3,(class,int,template<class> class)))
+
+ has_template_MyTemplate<MyClass>::value
+
+ is a compile time boolean constant which is either 'true' or 'false'
+ if the nested template exists.
+
+*/
 #define BOOST_TTI_HAS_TEMPLATE(name,params) \
   BOOST_TTI_TRAIT_HAS_TEMPLATE \
   ( \
@@ -251,10 +361,10 @@
     
     name = the name of the inner template.
 
- generates a metafunction called "trait" where 'trait' is the macro parameter.
+ generates a metafunction called "has_template_'name'" where 'name' is the mscro parameter.
     
               template<class TTI_T>
- struct trait
+ struct has_template_'name'
                 {
                 static const value = unspecified;
                 typedef mpl::bool_<true-or-false> type;

Modified: trunk/libs/tti/doc/tti_detail_has_template.qbk
==============================================================================
--- trunk/libs/tti/doc/tti_detail_has_template.qbk (original)
+++ trunk/libs/tti/doc/tti_detail_has_template.qbk 2012-11-16 20:50:58 EST (Fri, 16 Nov 2012)
@@ -209,17 +209,17 @@
  
  // Using variadic macro, `specific parameters`
  
- BOOST_TTI_HAS_TEMPLATE_CHECK_PARAMS(Template6,class X,int Y)
- BOOST_TTI_HAS_TEMPLATE_CHECK_PARAMS(Template7,typename A,template<class,class> struct B,long C)
- BOOST_TTI_HAS_TEMPLATE_CHECK_PARAMS(Template8,double X,typename Y)
- BOOST_TTI_HAS_TEMPLATE_CHECK_PARAMS(Template9,typename A,class B,typename C,class D,typename E,short F)
+ BOOST_TTI_HAS_TEMPLATE(Template6,class X,int Y)
+ BOOST_TTI_HAS_TEMPLATE(Template7,typename A,template<class,class> struct B,long C)
+ BOOST_TTI_HAS_TEMPLATE(Template8,double X,typename Y)
+ BOOST_TTI_HAS_TEMPLATE(Template9,typename A,class B,typename C,class D,typename E,short F)
  
  // or using non-variadic macro, `specific parameters`
  
- BOOST_TTI_HAS_TEMPLATE_CHECK_PARAMS(Template6,(2,(class X,int Y)))
- BOOST_TTI_HAS_TEMPLATE_CHECK_PARAMS(Template7,(4,(typename A,template<class,class> struct B,long C)))
- BOOST_TTI_HAS_TEMPLATE_CHECK_PARAMS(Template8,(2,(double X,typename Y)))
- BOOST_TTI_HAS_TEMPLATE_CHECK_PARAMS(Template9,(6,(typename A,class B,typename C,class D,typename E,short F)))
+ BOOST_TTI_HAS_TEMPLATE(Template6,(2,(class X,int Y)))
+ BOOST_TTI_HAS_TEMPLATE(Template7,(4,(typename A,template<class,class> struct B,long C)))
+ BOOST_TTI_HAS_TEMPLATE(Template8,(2,(double X,typename Y)))
+ BOOST_TTI_HAS_TEMPLATE(Template9,(6,(typename A,class B,typename C,class D,typename E,short F)))
  
 Next let us create some user-defined types we want to introspect.
 


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk