123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- [/
- (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]
|