Namespaces
Variants

std::meta::annotations_of

cppreference.net에서
< cpp | meta
 
 
 
리플렉션 라이브러리
 
리플렉션 타입 및 질의
리플렉션 질의
리플렉션 레이아웃 질의
타입 속성
타입 속성 질의
 
consteval std::vector<std::meta::info> annotations_of( std::meta::info item );
에 정의됨 (C++26부터)

어노테이션의 리플렉션을 포함하는 벡터를 반환합니다. 이는 item이 나타내는 엔터티에 적용됩니다.

item 이 함수의 매개변수 P를 나타내는 경우, F 함수에 대해, S을 명시적 인스턴스화를 무시하고, 평가 컨텍스트 내의 지점에서 도달 가능하며 F 또는 F이 특수화인 템플릿 함수를 선언하는 선언들의 집합이라고 할 때, 결과는 P에 적용되는 모든 어노테이션의 리플렉션을 포함합니다 (S의 모든 선언에서).

item이 직접 기반 클래스 관계를 나타내는 경우, 결과는 해당 기반-지정자에 적용되는 모든 어노테이션의 리플렉션을 포함합니다.

반환된 벡터의 임의의 두 리플렉션 R1와 R2에 대해, R1이 나타내는 어노테이션이 R2이 나타내는 어노테이션보다 앞에 있다면, R1는 벡터에서 R2보다 앞에 있습니다. R1와 R2가 동일한 번역 단위 T의 어노테이션을 나타내는 경우, 반환된 벡터에서 R1와 R2 사이의 모든 요소는 T의 어노테이션을 나타냅니다. 그 외의 순서는 명시되지 않습니다.

매개변수

item - 리플렉션 값

반환값

item이 나타내는 것에 적용되는 어노테이션의 리플렉션을 포함하는 벡터.

예외

std::meta::exception을 던집니다. 단, item이 다음 중 하나를 나타내는 경우는 제외:

  • 타입
  • 타입 별칭
  • 변수
  • 함수
  • 함수 매개변수
  • 네임스페이스
  • 열거자
  • 직접 기반 클래스 관계
  • 비정적 데이터 멤버

예제

#include <meta>
#include <print>

template<class T>
struct [[=42]] D {};

constexpr std::meta::info a1 = std::meta::annotations_of(^^D<int>)[0];
constexpr std::meta::info a2 = std::meta::annotations_of(^^D<char>)[0];
static_assert(a1 != a2);
static_assert(std::meta::constant_of(a1) == std::meta::constant_of(a2));

[[=1]] int x, y;
static_assert(std::meta::annotations_of(^^x)[0] == std::meta::annotations_of(^^y)[0]);

int main()
{
    [[=3.14]] typedef int var;
    typedef int var [[=42]];

    static constexpr auto annotations =
        std::define_static_array(std::meta::annotations_of(^^var));
    template for (constexpr auto ann : annotations) {
        std::println("{}", [:std::meta::constant_of(ann):]);
    }
}

출력:

3.14
42

참고 항목

리플렉션된 엔터티에 적용되고 지정된 타입을 갖는 어노테이션을 가져옵니다.
(함수)
리플렉션이 어노테이션
을 나타내는지 확인합니다. (함수)
리플렉션된 엔터티의 상수 값의 리플렉션을 가져옵니다.
(함수)
(C++26)
리플렉션된 엔터티의 타입의 리플렉션을 가져옵니다.
(함수)