std::meta::template_arguments_of

来自cppreference.com
< 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 - 一个反射值

返回值

包含 r 所表示内容的模板实参的反射的 vector

异常

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

示例

#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);

参阅

Template:cpp/meta/dsc is templateTemplate:cpp/meta/dsc has template arguments