std::meta::members_of

来自cppreference.com
< cpp | meta
在标头 <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) 确定。

Qr 所表示的类类型或命名空间。

如果声明满足以下所有要求,则它是符合条件 的:

  • 它位于 Q 的作用域内。(例如,块作用域的函数声明不符合条件。)
  • 它不是友元声明。
  • 它不是闭包类型的声明。
  • 它不是(部分或完全)模板特化的声明。
  • 如果 Q 是并非闭包类型的类类型,则该声明引入 Q 的直接成员,且该成员不是 Q 的嵌套匿名联合体的变体成员
  • 如果 Q 是闭包类型,则该声明引入函数调用运算符或函数调用运算符模板。

闭包类型 Q 的其他成员的声明是否符合条件是由实现定义的。

仅考虑处于对 members_of 的调用之前的声明式。

如果成员满足以下任一条件,则它是可表示 的:

  • 类类型或枚举类型
  • 类型别名
  • 类模板、函数模板、变量模板、别名模板或概念
  • 类型不包含未推导的占位符类型的变量或引用
  • 函数 F,满足:
  • F 的类型不包含未推导的占位符类型;
  • F 的约束(如果有)被满足;且
  • 如果 F预期析构函数,则它就是被选中的析构函数
  • 数据成员
  • 命名空间
  • 命名空间别名

此函数将 Q 的作用域中声明的无名位域视为具有相同访问权限的数据成员。

类成员和无名位域的反射按照它们声明的顺序出现。隐式声明的特殊成员出现在所有用户定义的成员之后。

参数

r - 完整类类型或命名空间的反射
ctx - 一个访问上下文

返回值

包含表示类成员或命名空间成员的反射值的 std::vector

异常

除非 std::meta::dealias(r) 表示在求值上下文中的某个点是完整的类类型,或者表示一个命名空间,否则抛出 std::meta::exception

示例

参阅

Template:cpp/meta/dsc bases of