splice_specifiers — 스플라이스 지정자
splice_specifiers — 스플라이스 지정자 (Splice specifiers)
**스플라이스 지정자(splice specifier)**는 반영 값(reflection value)으로부터 언어 구문을 만들어내, 반영을 소스 코드에 효과적으로 "스플라이스(이어 붙여)" 넣는 기능이에요. C++26의 정적 반영 기능이에요.
출처: cppreference
본문
문법 (Syntax)
[: constant-expression :] // (1) 문맥에 따라 의미가 정해지는 스플라이스
typename [: constant-expression :] // (2) 타입 지정자인 스플라이스
template [: constant-expression :] // (3) 템플릿을 가리키는 스플라이스
-
constant-expression—std::meta::info타입의 변환된 상수 표현식 -
(1) 문맥에 따라 의미가 달라지는 스플라이스 지정자
-
(2) 타입 지정자(type specifier)인 스플라이스
-
(3) 템플릿을 지정하는 스플라이스. 표현식으로 나타나지 않으면 반드시 템플릿 인자 목록이 뒤따라야 해요.
#include <meta>
// 컴파일 타임에 만들어진 reflection 값을 소스에 직접 이어 붙임
constexpr std::meta::info T = ^^int;
using X = typename [: T :]; // int와 같은 타입
스플라이스 지정자는 반영 연산자 ^^와 짝을 이뤄요. ^^가 코드를 반영 값으로 바꾼다면, [: :]는 반영 값을 다시 코드로 "스플라이스"해요.
// 타입의 반영을 받아 그 타입으로 변수 선언
constexpr std::meta::info SomeType = ...;
[: SomeType :] value = 42; // SomeType으로 변수 선언
// 템플릿 스플라이스
template<class> class Wrapper{};
using W = template [: ^^Wrapper :]<int>; // Wrapper<int>
반영과 스플라이스를 함께 쓰면 컴파일 타임에 프로그램 구조를 조사하고, 그 결과를 실제 코드로 재생성하는 메타프로그래밍을 할 수 있어요. C++26 표준화 단계의 기능이라 최신 컴파일러 지원을 확인해야 해요.