c250a66437
[SVN r84239]
123 lines
4.1 KiB
Plaintext
123 lines
4.1 KiB
Plaintext
[/
|
|
(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]
|