std::meta::members_of
来自cppreference.com
| 在标头 <meta> 定义
|
||
| |
(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::dealias(r) 表示在求值上下文中的某个点是完整的类类型,或者表示一个命名空间,否则抛出 std::meta::exception。
示例
| 本节未完成 原因:暂无示例 |