std::meta::members_of
来自 zh.cppreference.net
| 定义于头文件 <meta>
|
||
consteval std::vector<std::meta::info>
members_of( std::meta::info r, std::meta::access_context ctx );
|
(C++26 起) | |
返回一个 std::vector,其中包含由 r 表示的类类型或命名空间的成员的反射,并通过访问上下文 ctx 进行过滤。
结果中的每个反射 m 表示一个可访问的成员,该成员具有合格的声明并且是可表示的(见下文)。可访问性的确定方式如同通过 std::meta::is_accessible(m, ctx) 进行判断。
设 Q 为由 r 表示的类类型或命名空间。
一个声明是合格的,当它满足以下所有要求时:
- 它位于
Q的作用域内。(例如,块作用域函数声明不合格。) - 它不是一个友元声明。
- 它不是一个闭包类型的声明。
- 它不是一个(部分或完全)模板特化的声明。
- 如果
Q是一个不是闭包类型的类类型,则该声明引入了Q的一个直接成员,且该成员不是 的嵌套匿名联合体中的变体成员Q。 - 如果
Q是一个闭包类型,则该声明引入了一个函数调用运算符或函数调用运算符模板。
闭包类型 Q 的其他成员的声明是否合格由实现定义。
仅考虑在 members_of 调用之前的声明。
一个成员是可表示的,当它是以下之一时:
- 一个类或枚举类型
- 一个类型别名
- 一个类模板、函数模板、变量模板、别名模板或概念
- 一个变量或引用,其类型不包含未推导的占位符类型
- 一个函数
F满足:
F的类型不包含未推导的占位符类型;F的约束(如果有)得到满足;且- 如果
F是一个预期析构函数,则它是被选择的析构函数
- 一个数据成员
- 一个命名空间
- 一个命名空间别名
此函数将在 Q 作用域内声明的无名位域视为具有相同访问权限的数据成员。
类成员和无名位域的反射按其声明顺序出现。隐式声明的特殊成员出现在任何用户定义成员之后。
参数
| r | - | 完整类类型或命名空间的反射 |
| ctx | - | 一个访问上下文 |
返回值
一个 std::vector 的反射值,表示类成员或命名空间成员。
异常
抛出 std::meta::exception,除非 std::meta::dealias(r) 表示评估上下文中某一点完整的类类型,或者一个命名空间。
示例
| 本节不完整 原因:无示例 |
参阅
(C++26) |
获取反射类的可访问直接基类 (函数) |