Boost C++ 库

one of the most highly regarded and expertly designed C++ library projects in the world。 Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

第一章。类型特征内省库 - Boost C++ 函数库
Next

第一章。类型特征内省库

Edward Diener

根据 Boost 软件许可证版本 1.0 发布。(参见随附文件 LICENSE_1_0.txt 或在 https://boost.ac.cn/LICENSE_1_0.txt 复制)

目录

介绍
头文件
为什么选择 TTI 库?
术语
通用功能
宏元函数名称生成注意事项
宏元函数
内省内部类型
内省特定用户定义类型
内省内部类模板
使用 BOOST_TTI_HAS_TEMPLATE 宏
使用 has_template_(xxx) 元函数
内省函数模板技术
内省成员数据
内省成员函数
内省成员函数模板
内省静态成员数据
内省静态成员函数
内省静态成员函数模板
内省数据
内省函数
内省函数模板
嵌套类型
嵌套类型和函数签名
封闭类型
使用宏元函数的一个示例
参考
头文件 <boost/tti/gen/has_class_gen.hpp>
头文件 <boost/tti/gen/has_data_gen.hpp>
头文件 <boost/tti/gen/has_enum_gen.hpp>
头文件 <boost/tti/gen/has_function_gen.hpp>
头文件 <boost/tti/gen/has_function_template_gen.hpp>
头文件 <boost/tti/gen/has_member_data_gen.hpp>
头文件 <boost/tti/gen/has_member_function_gen.hpp>
头文件 <boost/tti/gen/has_member_function_template_gen.hpp>
头文件 <boost/tti/gen/has_static_member_data_gen.hpp>
头文件 <boost/tti/gen/has_static_member_function_gen.hpp>
头文件 <boost/tti/gen/has_static_member_function_template_gen.hpp>
头文件 <boost/tti/gen/has_template_gen.hpp>
头文件 <boost/tti/gen/has_type_gen.hpp>
头文件 <boost/tti/gen/has_union_gen.hpp>
头文件 <boost/tti/gen/member_type_gen.hpp>
头文件 <boost/tti/gen/namespace_gen.hpp>
头文件 <boost/tti/has_class.hpp>
头文件 <boost/tti/has_data.hpp>
头文件 <boost/tti/has_enum.hpp>
头文件 <boost/tti/has_function.hpp>
头文件 <boost/tti/has_function_template.hpp>
头文件 <boost/tti/has_member_data.hpp>
头文件 <boost/tti/has_member_function.hpp>
头文件 <boost/tti/has_member_function_template.hpp>
头文件 <boost/tti/has_static_member_data.hpp>
头文件 <boost/tti/has_static_member_function.hpp>
头文件 <boost/tti/has_static_member_function_template.hpp>
头文件 <boost/tti/has_template.hpp>
头文件 <boost/tti/has_type.hpp>
头文件 <boost/tti/has_union.hpp>
头文件 <boost/tti/member_type.hpp>
测试 TTI
历史
待办事项
致谢
索引

欢迎来到 Boost 类型特征内省库,简称 TTI。

TTI 是一个能够在编译时通过名称内省类型元素的库。

TTI 通过宏生成元函数。元函数是具有特定语法的类模板,包含一个嵌套的 'type' 成员。因此,在 C++ 中类模板可以出现的地方,就可以使用 TTI 宏。TTI 生成的元函数与 Boost MPL 库定义的任何其他元函数没有区别。

TTI 生成的元函数用于在编译时内省类型的元素,每个元函数至少接收正在内省的包含类型。

库的名称选择是因为该库提供了对类型的编译时功能,类似于 Boost Type Traits 库,并且因为该库提供的功能是能够内省类型中是否存在特定元素的能力。

我在这里非常宽泛地使用“内省”一词。通常计算机语言内省意味着首先请求按名称返回信息,然后可以进一步使用这些信息来内省更具体的信息。在 TTI 库中,您必须始终知道并提供名称,并使用适用于正确类型的内部元素的函数来查找该特定命名的实体是否存在。

您可能更喜欢使用“查询”而不是“内省”来表示此库的功能,但我在整个文档中都使用基于“内省”一词的术语。

该库的功能可以总结为:

  • 提供一套宏,用于在编译时内省类型。每个宏都接受类型元素的名称,并生成一个元函数,之后可以调用该元函数来确定该元素是否存在于类型中。这些生成的元函数在文档中将被称为“宏元函数”。要内省的类型可以是类、结构体或联合体。
  • 提供创建可能不存在的类型的 typedef 的方法。如果类型不存在,则返回一个空的标记类型作为 typedef 类型。这个 typedef 类型可以作为库元函数中的类型使用,而不会产生编译错误。

该库依赖于 Boost PP、Boost MPL、Boost Type Traits 和 Boost Function Types。

如果使用了库中的可变参数宏,该库还依赖于 Boost PP 库的可变参数宏支持。

该库是纯头文件库。

由于该库的所有依赖项都是纯头文件库,因此在使用 TTI 库时无需构建库。

有一个单一的头文件 boost/tti/tti.hpp,它包含了库中的所有头文件。

此外,还有针对库要内省的每个元素的单独的特定头文件。这允许更细粒度地包含要内省的嵌套元素。这些头文件是:

表 1.1。TTI 头文件

内省元素

特定头文件

类型

has_type.hpp

类/结构体

has_class.hpp

枚举

has_enum.hpp

联合

has_union.hpp

类模板

has_template.hpp

成员数据

has_member_data.hpp

成员函数

has_member_function.hpp

成员函数模板

has_member_function_template.hpp

静态成员数据

has_static_member_data.hpp

静态成员函数

has_static_member_function.hpp

静态成员函数模板

has_static_member_function_template.hpp

数据

has_data.hpp

函数

has_function.hpp

函数模板

has_function_template.hpp

创建成员类型

member_type.hpp



Next