◐ Shell
reader mode source ↗
来自cppreference.com
< cpp | meta


本节定义的工具支持反射式编程,使 C++ 程序能够观察程序自身的结构,并根据这些观察结果生成代码。

核心语言

反射库与两项核心语言特性协同工作:

反射库

Template:cpp/meta/dsc is lvalue reference qualifiedTemplate:cpp/meta/dsc is rvalue reference qualifiedTemplate:cpp/meta/dsc is conversion functionTemplate:cpp/meta/dsc is operator functionTemplate:cpp/meta/dsc is literal operatorTemplate:cpp/meta/dsc is special member functionTemplate:cpp/meta/dsc is constructorTemplate:cpp/meta/dsc is default constructorTemplate:cpp/meta/dsc is copy constructorTemplate:cpp/meta/dsc is move constructorTemplate:cpp/meta/dsc is assignmentTemplate:cpp/meta/dsc is copy assignmentTemplate:cpp/meta/dsc is move assignmentTemplate:cpp/meta/dsc is destructorTemplate:cpp/meta/dsc is vararg functionTemplate:cpp/meta/dsc is templateTemplate:cpp/meta/dsc is function templateTemplate:cpp/meta/dsc is variable templateTemplate:cpp/meta/dsc is class templateTemplate:cpp/meta/dsc is alias templateTemplate:cpp/meta/dsc is conversion function templateTemplate:cpp/meta/dsc is operator function templateTemplate:cpp/meta/dsc is literal operator templateTemplate:cpp/meta/dsc is constructor templateTemplate:cpp/meta/dsc is conceptTemplate:cpp/meta/dsc is class memberTemplate:cpp/meta/dsc is namespace memberTemplate:cpp/meta/dsc is nonstatic data memberTemplate:cpp/meta/dsc is static memberTemplate:cpp/meta/dsc is baseTemplate:cpp/meta/dsc has template argumentsTemplate:cpp/meta/dsc template ofTemplate:cpp/meta/dsc template arguments ofTemplate:cpp/meta/dsc member offsetTemplate:cpp/meta/dsc data member optionsTemplate:cpp/meta/dsc is void typeTemplate:cpp/meta/dsc is null pointer typeTemplate:cpp/meta/dsc is integral typeTemplate:cpp/meta/dsc is floating point typeTemplate:cpp/meta/dsc is array typeTemplate:cpp/meta/dsc is pointer typeTemplate:cpp/meta/dsc is lvalue reference typeTemplate:cpp/meta/dsc is rvalue reference typeTemplate:cpp/meta/dsc is member object pointer typeTemplate:cpp/meta/dsc is member function pointer typeTemplate:cpp/meta/dsc is enum typeTemplate:cpp/meta/dsc is union typeTemplate:cpp/meta/dsc is class typeTemplate:cpp/meta/dsc is function typeTemplate:cpp/meta/dsc is reflection typeTemplate:cpp/meta/dsc is reference typeTemplate:cpp/meta/dsc is arithmetic typeTemplate:cpp/meta/dsc is fundamental typeTemplate:cpp/meta/dsc is object typeTemplate:cpp/meta/dsc is scalar typeTemplate:cpp/meta/dsc is compound typeTemplate:cpp/meta/dsc is member pointer typeTemplate:cpp/meta/dsc is const typeTemplate:cpp/meta/dsc is volatile typeTemplate:cpp/meta/dsc is trivially copyable typeTemplate:cpp/meta/dsc is standard layout typeTemplate:cpp/meta/dsc is empty typeTemplate:cpp/meta/dsc is polymorphic typeTemplate:cpp/meta/dsc is abstract typeTemplate:cpp/meta/dsc is final typeTemplate:cpp/meta/dsc is aggregate typeTemplate:cpp/meta/dsc is structural typeTemplate:cpp/meta/dsc is signed typeTemplate:cpp/meta/dsc is unsigned typeTemplate:cpp/meta/dsc is bounded array typeTemplate:cpp/meta/dsc is unbounded array typeTemplate:cpp/meta/dsc is scoped enum typeTemplate:cpp/meta/dsc is constructible typeTemplate:cpp/meta/dsc is default constructible typeTemplate:cpp/meta/dsc is copy constructible typeTemplate:cpp/meta/dsc is move constructible typeTemplate:cpp/meta/dsc is assignable typeTemplate:cpp/meta/dsc is copy assignable typeTemplate:cpp/meta/dsc is move assignable typeTemplate:cpp/meta/dsc is swappable with typeTemplate:cpp/meta/dsc is swappable typeTemplate:cpp/meta/dsc is destructible typeTemplate:cpp/meta/dsc is trivially constructible typeTemplate:cpp/meta/dsc is trivially default constructible typeTemplate:cpp/meta/dsc is trivially copy constructible typeTemplate:cpp/meta/dsc is trivially move constructible typeTemplate:cpp/meta/dsc is trivially assignable typeTemplate:cpp/meta/dsc is trivially copy assignable typeTemplate:cpp/meta/dsc is trivially move assignable typeTemplate:cpp/meta/dsc is trivially destructible typeTemplate:cpp/meta/dsc is nothrow constructible typeTemplate:cpp/meta/dsc is nothrow default constructible typeTemplate:cpp/meta/dsc is nothrow copy constructible typeTemplate:cpp/meta/dsc is nothrow move constructible typeTemplate:cpp/meta/dsc is nothrow assignable typeTemplate:cpp/meta/dsc is nothrow copy assignable typeTemplate:cpp/meta/dsc is nothrow move assignable typeTemplate:cpp/meta/dsc is nothrow swappable with typeTemplate:cpp/meta/dsc is nothrow swappable typeTemplate:cpp/meta/dsc is nothrow destructible typeTemplate:cpp/meta/dsc is implicit lifetime typeTemplate:cpp/meta/dsc has virtual destructorTemplate:cpp/meta/dsc has unique object representationsTemplate:cpp/meta/dsc reference constructs from temporaryTemplate:cpp/meta/dsc reference converts from temporaryTemplate:cpp/meta/dsc rankTemplate:cpp/meta/dsc extentTemplate:cpp/meta/dsc is same typeTemplate:cpp/meta/dsc is base of typeTemplate:cpp/meta/dsc is virtual base of typeTemplate:cpp/meta/dsc is convertible typeTemplate:cpp/meta/dsc is nothrow convertible typeTemplate:cpp/meta/dsc is layout compatible typeTemplate:cpp/meta/dsc is pointer interconvertible base of typeTemplate:cpp/meta/dsc is invocable typeTemplate:cpp/meta/dsc is invocable r typeTemplate:cpp/meta/dsc is nothrow invocable typeTemplate:cpp/meta/dsc is nothrow invocable r typeTemplate:cpp/meta/dsc remove constTemplate:cpp/meta/dsc remove volatileTemplate:cpp/meta/dsc remove cvTemplate:cpp/meta/dsc add constTemplate:cpp/meta/dsc add volatileTemplate:cpp/meta/dsc add cvTemplate:cpp/meta/dsc remove referenceTemplate:cpp/meta/dsc add lvalue referenceTemplate:cpp/meta/dsc add rvalue referenceTemplate:cpp/meta/dsc make signedTemplate:cpp/meta/dsc make unsignedTemplate:cpp/meta/dsc remove extentTemplate:cpp/meta/dsc remove all extentsTemplate:cpp/meta/dsc remove pointerTemplate:cpp/meta/dsc add pointerTemplate:cpp/meta/dsc remove cvrefTemplate:cpp/meta/dsc decayTemplate:cpp/meta/dsc common typeTemplate:cpp/meta/dsc common referenceTemplate:cpp/meta/dsc underlying typeTemplate:cpp/meta/dsc invoke resultTemplate:cpp/meta/dsc unwrap referenceTemplate:cpp/meta/dsc unwrap ref decayTemplate:cpp/meta/dsc tuple sizeTemplate:cpp/meta/dsc tuple elementTemplate:cpp/meta/dsc is applicable typeTemplate:cpp/meta/dsc is nothrow applicable typeTemplate:cpp/meta/dsc apply resultTemplate:cpp/meta/dsc variant sizeTemplate:cpp/meta/dsc variant alternativeTemplate:cpp/meta/dsc type orderTemplate:cpp/meta/dsc is string literal
在标头 <meta> 定义
(C++26)
反射值的类型
(typedef) [编辑]
反射函数抛出的异常
(类) [编辑]
提升编译时存储为静态存储
将编译期字符串提升为静态存储,返回表示该静态字符串的反射。
(函数模板) [编辑]
将编译期数组提升为静态存储,返回表示该静态数组的反射
(函数模板) [编辑]
将编译期字符串提升为静态存储,返回指向该静态字符串首字符的指针
(函数模板) [编辑]
将编译期数组提升为静态存储,返回静态数组的跨度。
(函数模板) [编辑]
将编译期值提升为静态存储,返回指向该静态对象的指针。
(函数模板) [编辑]
运算符表示
(C++26)
标明可重载运算符
(枚举) [编辑]
识别反射所表示的运算符
(函数) [编辑]
meta::operators 枚举项转换为其符号名
(函数) [编辑]
反射名字和位置
检查反射是否表示带有标识符的实体
(函数) [编辑]
若所反射实体具有标识符,则获取其名字
(函数) [编辑]
获取适于标识所反射实体的字符串
(函数) [编辑]
获取所反射实体的源代码位置
(函数) [编辑]
反射查询
(C++26)
获取所反射实体的类型的反射
(函数) [编辑]
(C++26)
获取所反射变量的对象的反射
(函数) [编辑]
获取所反射实体的常量值的反射
(函数) [编辑]
检查反射是否表示公开、受保护或私有的成员或基类
(函数) [编辑]
检查反射是否表示虚成员函数或虚基类
(函数) [编辑]
检查反射是否表示纯虚成员函数
(函数) [编辑]
检查反射是否表示覆盖了其他成员函数的成员函数
(函数) [编辑]
(C++26)
检查反射是否表示最终类或最终成员函数
(函数) [编辑]
检查反射是否表示弃置的函数
(函数) [编辑]
检查反射是否表示预置的函数
(函数) [编辑]
检查反射是否表示用户提供的函数
(函数) [编辑]
检查反射是否表示用户声明的函数
(函数) [编辑]
检查反射是否表示声明为显式的成员函数
(函数) [编辑]
检查反射是否表示 noexcept 函数或函数类型
(函数) [编辑]
检查反射是否表示位域或位域的数据成员描述
(函数) [编辑]
检查反射是否表示枚举项
(函数) [编辑]
检查反射是否表示标注
(函数) [编辑]
(C++26)
检查反射是否表示 const 类型或带有 const 限定符的函数类型
(函数) [编辑]
检查反射是否表示 volatile 类型或带有 volatile 限定符的函数类型
(函数) [编辑]
检查反射是否表示 mutable 非静态数据成员
(函数) [编辑]
检查所反射实体是否具有存储期
(函数) [编辑]
检查所反射实体是否具有链接
(函数) [编辑]
检查所反射实体具有 "C" 语言链接extern "C"
(函数) [编辑]
检查反射是否表示个完整类型
(函数) [编辑]
检查所反射实体是否完整定义了成员列表
(函数) [编辑]
检查反射是否表示变量
(函数) [编辑]
(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 异常作为反射错误处理。

示例