Namespaces
Variants

std::meta::template_arguments_of

cppreference.net에서
< cpp | meta
 
 
 
리플렉션 라이브러리
 
리플렉션 타입 및 쿼리
리플렉션 쿼리
리플렉션 레이아웃 쿼리
타입 속성
타입 속성 쿼리
 
헤더 <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
리플렉션된 엔티티가 템플릿에 템플릿 인자를 치환하여 생성되었는지 확인합니다.
(함수)