反射库 (C++26 起)

来自cppreference.com
< cpp | meta


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

核心语言

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

反射库

Template:cpp/meta/dsc operator ofTemplate:cpp/meta/dsc symbol ofTemplate:cpp/meta/dsc u8symbol ofTemplate:cpp/meta/dsc has identifierTemplate:cpp/meta/dsc identifier ofTemplate:cpp/meta/dsc u8identifier ofTemplate:cpp/meta/dsc display string ofTemplate:cpp/meta/dsc u8display string ofTemplate:cpp/meta/dsc source location ofTemplate:cpp/meta/dsc type ofTemplate:cpp/meta/dsc object ofTemplate:cpp/meta/dsc constant ofTemplate:cpp/meta/dsc is publicTemplate:cpp/meta/dsc is privateTemplate:cpp/meta/dsc is virtualTemplate:cpp/meta/dsc is pure virtualTemplate:cpp/meta/dsc is overrideTemplate:cpp/meta/dsc is finalTemplate:cpp/meta/dsc is deletedTemplate:cpp/meta/dsc is defaultedTemplate:cpp/meta/dsc is user providedTemplate:cpp/meta/dsc is user declaredTemplate:cpp/meta/dsc is explicitTemplate:cpp/meta/dsc is noexceptTemplate:cpp/meta/dsc is bit fieldTemplate:cpp/meta/dsc is enumeratorTemplate:cpp/meta/dsc is annotationTemplate:cpp/meta/dsc is constTemplate:cpp/meta/dsc is volatileTemplate:cpp/meta/dsc is mutable memberTemplate:cpp/meta/dsc is lvalue reference qualifiedTemplate:cpp/meta/dsc is rvalue reference qualifiedTemplate:cpp/meta/dsc has static storage durationTemplate:cpp/meta/dsc has thread storage durationTemplate:cpp/meta/dsc has automatic storage durationTemplate:cpp/meta/dsc has internal linkageTemplate:cpp/meta/dsc has module linkageTemplate:cpp/meta/dsc has external linkageTemplate:cpp/meta/dsc has c language linkageTemplate:cpp/meta/dsc has linkageTemplate:cpp/meta/dsc is enumerable typeTemplate: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 explicit object parameterTemplate:cpp/meta/dsc has default argumentTemplate: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 valueTemplate:cpp/meta/dsc is objectTemplate:cpp/meta/dsc is structured bindingTemplate: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 default member initializerTemplate:cpp/meta/dsc has parentTemplate:cpp/meta/dsc parent ofTemplate:cpp/meta/dsc dealiasTemplate:cpp/meta/dsc has template argumentsTemplate:cpp/meta/dsc template ofTemplate:cpp/meta/dsc template arguments ofTemplate:cpp/meta/dsc parameters ofTemplate:cpp/meta/dsc variable ofTemplate:cpp/meta/dsc return type ofTemplate:cpp/meta/dsc is accessibleTemplate:cpp/meta/dsc has inaccessible nonstatic data membersTemplate:cpp/meta/dsc has inaccessible basesTemplate:cpp/meta/dsc has inaccessible subobjectsTemplate:cpp/meta/dsc current functionTemplate:cpp/meta/dsc current classTemplate:cpp/meta/dsc current namespaceTemplate:cpp/meta/dsc members ofTemplate:cpp/meta/dsc bases ofTemplate:cpp/meta/dsc static data members ofTemplate:cpp/meta/dsc nonstatic data members ofTemplate:cpp/meta/dsc subobjects ofTemplate:cpp/meta/dsc enumerators ofTemplate:cpp/meta/dsc member offsetTemplate:cpp/meta/dsc offset ofTemplate:cpp/meta/dsc size ofTemplate:cpp/meta/dsc alignment ofTemplate:cpp/meta/dsc bit size ofTemplate:cpp/meta/dsc annotations ofTemplate:cpp/meta/dsc annotations of with typeTemplate:cpp/meta/dsc extractTemplate:cpp/meta/dsc data member optionsTemplate:cpp/meta/dsc data member specTemplate:cpp/meta/dsc is data member specTemplate:cpp/meta/dsc define aggregateTemplate: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)
标明可重载运算符
(枚举) [编辑]
反射名字和位置
反射查询
检查反射是否是一个完整类型
(函数) [编辑]
检查反射是否是一个变量
(函数) [编辑]
(C++26)
检查反射是否是一个类型
(函数) [编辑]
检查反射是否是一个命名空间
(函数) [编辑]
检查反射是否是一个类型别名
(函数) [编辑]
检查反射是否是一个命名空间别名
(函数) [编辑]
检查反射是否是一个函数
(函数) [编辑]
检查反射是否是一个函数形参
(函数) [编辑]
可访问性查询
表示访问检查的上下文
(类) [编辑]
可访问性作用域识别
反射成员查询
反射布局查询
标注反射
值提取
反射代换
指定反射值组成的范围
(概念) [编辑]
检查给定的实参是否可以替换到给定的模板中
(函数模板) [编辑]
将给定的实参替换到给定的模板中,并返回替换结果的反射
(函数模板) [编辑]
表达式结果反射
返回表示某个值或模板形参对象的反射,适合用作常量模板实参
(函数模板) [编辑]
返回表示对象的反射,适合用作常量模板实参
(函数模板) [编辑]
返回表示函数的反射,适合用作常量模板实参
(函数模板) [编辑]
类定义生成
基础类型类别
复合类型类别
类型属性
类型属性查询
类型关系
常性/易变性修改
引用修改
符号性修改
数组修改
指针修改
其他变换
检查字符串字面量