Namespaces
Variants

std::meta::template_arguments_of

来自 zh.cppreference.net
< cpp | meta
 
 
 
反射库
 
反射类型和查询
反射查询
反射布局查询
类型属性
类型属性查询
 
定义于头文件 <meta>
consteval std::vector<std::meta::info> template_arguments_of( std::meta::info r );
(C++26 起)

返回一个 vector,包含用于实例化 r 所表示实体的模板参数的反射,顺序与其在模板参数列表中的出现顺序相同。

对于给定的模板参数 A,对应的反射值 R 按如下方式确定:

  • 如果 A 是类型或类型别名,则 R 表示该类型。
  • 否则,如果 A 是类模板、变量模板、概念或别名模板,则 R 表示该模板。
  • 否则(A 是非类型模板参数),令 P 为对应的模板参数。
  • 如果 P 具有引用类型,则 R 表示 A 所指代的对象或函数。
  • 如果 P 具有类类型,则 R 表示对应的模板参数对象。
  • 否则,R 表示 A 的值。

参数

r - 一个反射值

返回值

一个 vector,包含 r 所表示对象的模板参数的反射。

异常

抛出 std::meta::exception,除非 std::meta::has_template_arguments(r) 为 true(即 r 表示从模板实例化的实体)。

示例

#include <meta>
#include <type_traits>

static_assert(template_arguments_of(^^std::void_t<int>)[0] == ^^int);
static_assert(template_arguments_of(^^std::enable_if<true>).size() == 2);
static_assert(template_arguments_of(^^std::enable_if<true>)[0] ==
              std::meta::reflect_constant(true));
static_assert(template_arguments_of(^^std::enable_if<true>)[1] == ^^void);

int main() {}

参阅

Template:cpp/meta/dsc is template
检查反射实体是否由将模板参数替换到模板中而产生
(函数)