std::meta::template_arguments_of
来自 zh.cppreference.net
| 定义于头文件 <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(C++26) |
检查反射实体是否由将模板参数替换到模板中而产生 (函数) |