| [/ |
| (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_intro Introduction] |
| |
| Welcome to the Boost Type Traits Introspection library, abbreviated TTI. |
| |
| TTI is a library which provides the ability to introspect by name the elements |
| of a type at compile time. |
| |
| TTI works through macros generating metafunctions. Metafunctions are class |
| templates of a particular syntax, having a nested 'type' member. So wherever |
| in C++ class templates can occur, TTI macros can be used. The metafunctions |
| generated by TTI are no different from any other metafunction as defined by |
| the Boost MPL library. |
| |
| The metafunctions generated by TTI are used to introspect elements of a type |
| at compile time, always passing at minimum to each metafunction the enclosing |
| type being introspected. |
| |
| The name of the library has been chosen because the library offers |
| compile time functionality on a type, similar to the Boost Type Traits library, |
| and because the functionality the library offers is the ability to introspect |
| a type about the existence of a specific element within that type. |
| |
| I use the word "introspect" in a very broad sense here. Normally computer |
| language introspection means initially asking for information to be returned |
| by name, which can then further be used to introspect for more specific |
| information. In the TTI library one must always know and supply the name, and |
| use the functionality provided for the correct type of inner element to find |
| out if that particular named entity exists. |
| |
| You may prefer the term "query" instead of "introspection" to denote what this |
| library does, but I use terminology based on the word "introspect" throughout |
| this documentation. |
| |
| The functionality of the library may be summed up as: |
| |
| * Provide the means to introspect a type at compile time |
| using a set of macros. Each macro takes the name of the |
| type's element and generates a metafunction which can be |
| subsequently invoked to determine whether or not the |
| element exists within the type. These generated metafunctions |
| will be called "macro metafunctions" in the documentation. |
| |
| * Provide the means to create a typedef for a type which may |
| not exist. This typedef type can be used as a type in the |
| metafunctions of the library without producing compile-time |
| errors. |
| |
| The library is dependent on Boost PP, Boost MPL, |
| Boost Type Traits, and Boost Function Types. |
| |
| The library is also dependent on the variadic macro support |
| of the Boost PP library if the variadic macros in the library |
| are used. |
| |
| The library is a header only library. |
| |
| Since the dependencies of the library are all header only |
| libraries, there is no need to build a library in order to use |
| the TTI library. |
| |
| [section:tti_headers Header Files] |
| |
| There are is a single header file, `boost/tti/tti.hpp`, |
| which includes all the header files in the library. |
| |
| There are also separate specific header files for each of the elements |
| to be introspected by the library. This allows for finer-grained inclusion |
| of the nested elements to be introspected. These header files are: |
| |
| [table:tbhfiles TTI Header Files |
| [ |
| [Introspected Element] |
| [Specific Header File] |
| ] |
| [ |
| [Type] |
| [[headerref boost/tti/has_type.hpp `has_type.hpp`]] |
| ] |
| [ |
| [Class Template] |
| [[headerref boost/tti/has_template.hpp `has_template.hpp`]] |
| ] |
| [ |
| [Member data] |
| [[headerref boost/tti/has_member_data.hpp `has_member_data.hpp`]] |
| ] |
| [ |
| [Member function] |
| [[headerref boost/tti/has_member_function.hpp `has_member_function.hpp`]] |
| ] |
| [ |
| [Static member data] |
| [[headerref boost/tti/has_static_member_data.hpp `has_static_member_data.hpp`]] |
| ] |
| [ |
| [Static member function] |
| [[headerref boost/tti/has_static_member_function.hpp `has_static_member_function.hpp`]] |
| ] |
| [ |
| [Data] |
| [[headerref boost/tti/has_data.hpp `has_data.hpp`]] |
| ] |
| [ |
| [Function] |
| [[headerref boost/tti/has_function.hpp `has_function.hpp`]] |
| ] |
| [ |
| [Member Type Creation] |
| [[headerref boost/tti/member_type.hpp `member_type.hpp`]] |
| ] |
| ] |
| |
| [endsect] |
| |
| [endsect] |