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-expressionstd::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 표준화 단계의 기능이라 최신 컴파일러 지원을 확인해야 해요.

더 알아보기 (Learn more)

cppreference