operator_reflection — 반영 연산자
operator_reflection — 반영 연산자 (Reflection operator)
**반영 연산자(reflection operator)**는 단항 ^^ 연산자로, 주어진 언어 구문(language construct)의 반영(reflection)을 std::meta::info 타입으로 만들어내요. C++26에서 도입돼요.
컴파일 타임에 프로그램 구조(타입, 멤버, 표현식 등)를 조사하고 조작할 수 있게 해주는 정적 반영(static reflection)의 핵심 도구예요.
출처: cppreference
본문
문법 (Syntax)
^^ :: // (1) 전역 네임스페이스 (C++26)
^^ reflection-name // (2) 반영 이름 (C++26)
^^ type-id // (3) 타입 (C++26)
^^ id-expression // (4) 식별자 표현식 (C++26)
reflection-name— 식별자. 선택적으로 한정되고, 템플릿 구분자를 사용할 수 있어요. 이 형태가type-id와id-expression보다 우선해요.type-id— 타입 이름id-expression— 식별자 표현식
#include <meta>
// 타입의 반영
constexpr std::meta::info t = ^^int; // int 타입의 반영
constexpr std::meta::info c = ^^MyClass; // MyClass 타입의 반영
// 이름의 반영
struct Point { int x; int y; };
constexpr std::meta::info m = ^^Point::x; // 멤버의 반영
^^ 연산자는 컴파일 타임 상수인 std::meta::info 객체를 생성해요. 이 객체를 표준 메타 프로그래밍 함수(std::meta::members_of, std::meta::has_member 등)와 함께 사용하면, 컴파일 타임에 타입의 멤버를 순회하거나 멤버 존재를 검사하는 등의 작업을 할 수 있어요.
constexpr auto mems = std::meta::members_of(^^Point);
// 컴파일 타임에 Point의 모든 비정적 멤버를 순회 가능
정적 반영은 리플렉션·직렬화·타입 검사 등을 컴파일 타임에 수행할 수 있게 해서, C++의 메타프로그래밍을 크게 강화해요. 다만 C++26 표준화 단계의 기능이므로 최신 컴파일러 지원을 확인해야 해요.