std::meta::template_arguments_of
cppreference.net에서
| 헤더 <meta>
|
||
consteval std::vector<std::meta::info> template_arguments_of( std::meta::info r );
|
(C++26부터)에 정의됨 | |
r이 나타내는 엔티티를 인스턴스화하는 데 사용된 템플릿 인자의 리플렉션을 포함하는 벡터를 반환합니다. 이들은 템플릿 인자 목록에 나타나는 순서대로 정렬됩니다.
주어진 템플릿 인자 A에 대해, 해당 리플렉션 값 R은 다음과 같이 결정됩니다:
A이 타입 또는 타입 별칭인 경우,R은 타입을 나타냅니다.- 그렇지 않고
A이 클래스 템플릿, 변수 템플릿, 개념 또는 별칭 템플릿인 경우,R은 템플릿을 나타냅니다. - 그렇지 않은 경우 (
A이 비타입 템플릿 인자임),P을 해당 템플릿 매개변수로 둡니다.
P이 참조 타입을 가지면,R은A이 참조하는 객체 또는 함수를 나타냅니다.P이 클래스 타입을 가지면,R은 해당 템플릿 매개변수 객체를 나타냅니다.- 그렇지 않으면,
R은A의 값을 나타냅니다.
매개변수
| r | - | 리플렉션 값 |
반환값
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) |
리플렉션된 엔티티가 템플릿에 템플릿 인자를 치환하여 생성되었는지 확인합니다. (함수) |