来自cppreference.com
本节定义的工具支持反射式编程,使 C++ 程序能够观察程序自身的结构,并根据这些观察结果生成代码。
核心语言
反射库与两项核心语言特性协同工作:
反射库
| 本节未完成 |
在标头
<meta> 定义 | |
(C++26) |
反射值的类型 (typedef) |
(C++26) |
反射函数抛出的异常 (类) |
提升编译时存储为静态存储 | |
(C++26) |
将编译期字符串提升为静态存储,返回表示该静态字符串的反射。 (函数模板) |
(C++26) |
将编译期数组提升为静态存储,返回表示该静态数组的反射 (函数模板) |
(C++26) |
将编译期字符串提升为静态存储,返回指向该静态字符串首字符的指针 (函数模板) |
(C++26) |
将编译期数组提升为静态存储,返回静态数组的跨度。 (函数模板) |
(C++26) |
将编译期值提升为静态存储,返回指向该静态对象的指针。 (函数模板) |
运算符表示 | |
(C++26) |
标明可重载运算符 (枚举) |
(C++26) |
识别反射所表示的运算符 (函数) |
(C++26) |
将 meta::operators 枚举项转换为其符号名 (函数) |
反射名字和位置 | |
(C++26) |
检查反射是否表示带有标识符的实体 (函数) |
(C++26) |
若所反射实体具有标识符,则获取其名字 (函数) |
| 获取适于标识所反射实体的字符串 (函数) | |
(C++26) |
获取所反射实体的源代码位置 (函数) |
反射查询 | |
(C++26) |
获取所反射实体的类型的反射 (函数) |
(C++26) |
获取所反射变量的对象的反射 (函数) |
(C++26) |
获取所反射实体的常量值的反射 (函数) |
| 检查反射是否表示公开、受保护或私有的成员或基类 (函数) | |
(C++26) |
检查反射是否表示虚成员函数或虚基类 (函数) |
(C++26) |
检查反射是否表示纯虚成员函数 (函数) |
(C++26) |
检查反射是否表示覆盖了其他成员函数的成员函数 (函数) |
(C++26) |
检查反射是否表示最终类或最终成员函数 (函数) |
(C++26) |
检查反射是否表示弃置的函数 (函数) |
(C++26) |
检查反射是否表示预置的函数 (函数) |
(C++26) |
检查反射是否表示用户提供的函数 (函数) |
(C++26) |
检查反射是否表示用户声明的函数 (函数) |
(C++26) |
检查反射是否表示声明为显式的成员函数 (函数) |
(C++26) |
检查反射是否表示 noexcept 函数或函数类型 (函数) |
(C++26) |
检查反射是否表示位域或位域的数据成员描述 (函数) |
(C++26) |
检查反射是否表示枚举项 (函数) |
(C++26) |
检查反射是否表示标注 (函数) |
(C++26) |
检查反射是否表示 const 类型或带有 const 限定符的函数类型 (函数) |
(C++26) |
检查反射是否表示 volatile 类型或带有 volatile 限定符的函数类型 (函数) |
(C++26) |
检查反射是否表示 mutable 非静态数据成员 (函数) |
| 检查所反射实体是否具有存储期 (函数) | |
| 检查所反射实体是否具有链接 (函数) | |
(C++26) |
检查所反射实体具有 "C" 语言链接(extern "C") (函数) |
(C++26) |
检查反射是否表示个完整类型 (函数) |
(C++26) |
检查所反射实体是否完整定义了成员列表 (函数) |
(C++26) |
检查反射是否表示变量 (函数) |
(C++26) |
检查反射是否表示类型 (函数) |
(C++26) |
检查反射是否表示命名空间 (函数) |
(C++26) |
检查反射是否表示类型别名 (函数) |
(C++26) |
检查反射是否表示命名空间别名 (函数) |
(C++26) |
检查反射是否表示函数 (函数) |
(C++26) |
检查反射是否表示函数形参 (函数) |
(C++26) |
检查反射是否表示显式对象形参 (函数) |
(C++26) |
检查所反射函数形参是否带有默认实参 (函数) |
(C++26) |
检查反射是否表示(标量)值 (函数) |
(C++26) |
检查反射是否表示静态对象 (函数) |
(C++26) |
检查反射是否表示结构化绑定 (函数) |
| 检查所反射的非静态数据成员是否带有默认成员初始化器 (函数) | |
(C++26) |
检查所反射实体是否被作用域包含 (函数) |
(C++26) |
获取包含所反射实体的作用域 (函数) |
(C++26) |
获取被反射的类型/命名空间别名的底层实体的反射 (函数) |
(C++26) |
获取所反射函数的各个形参 (函数) |
(C++26) |
获取所反射函数形参在函数定义中的变量 (函数) |
(C++26) |
获取所反射函数的返回类型 (函数) |
可访问性查询 | |
(C++26) |
表示访问检查的上下文 (类) |
(C++26) |
检查成员在给定上下文中是否可访问 (函数) |
| 检查所反射类是否具有任何不可访问非静态数据成员 (函数) | |
(C++26) |
检查所反射类是否具有任何不可访问直接基类 (函数) |
(C++26) |
检查所反射类是否具有任何不可访问非静态数据成员或直接基类 (函数) |
作用域识别 | |
(C++26) |
反射外围函数的反射 (函数) |
(C++26) |
返回外围类的反射 (函数) |
(C++26) |
返回外围命名空间的反射 (函数) |
反射成员查询 | |
(C++26) |
获取所反射的类或命名空间的各个可访问直接成员 (函数) |
(C++26) |
获取所反射类的各个可访问直接基类 (函数) |
(C++26) |
获取所反射类的可访问静态数据成员 (函数) |
(C++26) |
获取所反射类的可访问非静态数据成员 (函数) |
(C++26) |
获取所反射类的可访问基类子对象和非静态数据成员 (函数) |
(C++26) |
获取所反射枚举类型的各个枚举符 (函数) |
反射布局查询 | |
(C++26) |
返回(成员或基类)子对象相对于其外围类的偏移量 (函数) |
(C++26) |
返回所反射对象或类型的大小(字节数) (函数) |
(C++26) |
返回所反射对象或类型的对齐值 (函数) |
(C++26) |
返回所反射对象或类型的大小(位数) (函数) |
标注反射 | |
(C++26) |
获取应用于所反射实体的标注 (函数) |
(C++26) |
获取应用于所反射实体且具有指定类型的标注 (函数) |
值提取 | |
(C++26) |
提取所反射实体的值 (函数模板) |
反射代换 | |
(C++26) |
指定反射值组成的范围 (概念) |
(C++26) |
检查所反射实参是否可以向所反射模板中代换 (函数模板) |
(C++26) |
获取在所反射模板中代换所反射实参后的结果的反射 (函数模板) |
表达式结果反射 | |
(C++26) |
返回表示某个值或模板形参对象的反射,适合用作常量模板实参 (函数模板) |
(C++26) |
返回表示对象的反射,适合用作常量模板实参 (函数模板) |
(C++26) |
返回表示函数的反射,适合用作常量模板实参 (函数模板) |
类定义生成 | |
(C++26) |
创建用于注入声明的数据成员描述 (函数) |
(C++26) |
检查反射表示的是否是数据成员描述 (函数) |
(C++26) |
从数据成员描述序列定义一个聚合类型 (函数模板) |
基础类型类别 | |
复合类型类别 | |
类型属性 | |
类型属性查询 | |
类型关系 | |
常性/易变性修改 | |
引用修改 | |
符号性修改 | |
数组修改 | |
指针修改 | |
其他变换 | |
检查字符串字面量 | |
注解
| 功能特性测试宏 | 值 | 标准 | 功能特性 |
|---|---|---|---|
__cpp_lib_reflection |
202506L |
(C++26) | <meta>:反射库支持。 使用 constexpr 异常作为反射错误处理。 |
示例
| 本节未完成 原因:暂无示例 |