Boost C++ 库

...世界上最受推崇和专业设计的 C++ 库项目之一。 Herb SutterAndrei Alexandrescu, C++ 编码标准

Next

第 1 章。类型特征内省库

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 类型特征库,并且因为该库提供的功能是内省类型中特定元素存在的能力。

我在这里非常广泛地使用“内省”这个词。通常,计算机语言内省最初意味着请求按名称返回信息,然后可以进一步使用这些信息来内省更具体的信息。在 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