variable_template — 변수 템플릿
variable_template — 변수 템플릿 (Variable template)
**변수 템플릿(variable template)**은 변수 또는 정적 데이터 멤버의 집합(family)을 정의하는 템플릿이에요. C++14에서 도입됐어요.
타입 매개변수에 따라 값이 달라지는 상수·변수를 정의할 때 사용해요.
출처: cppreference
본문
문법 (Syntax)
template< parameter-list > variable-declaration // (1)
template< parameter-list > requires constraint variable-declaration // (2)
variable-declaration— 변수의 선언. 선언된 변수 이름이 템플릿 이름이 돼요.parameter-list— 비어 있지 않은, 쉼표로 구분된 템플릿 매개변수 목록
// 타입마다 다른 값을 갖는 변수 템플릿
template<typename T>
constexpr T pi = static_cast<T>(3.1415926535897932385);
pi<float>; // 3.14159...f
pi<double>; // 3.14159...
pi<int>; // 3 (int로 캐스팅)
변수 템플릿은 constexpr과 함께 컴파일 타임 값을 타입별로 정의하는 데 특히 유용해요.
// 타입이 특정 성질을 갖는지의 변수 템플릿
template<typename T>
constexpr bool is_pointer = false;
template<typename T>
constexpr bool is_pointer<T*> = true; // 부분 특수화
is_pointer<int>; // false
is_pointer<int*>; // true
클래스의 정적 데이터 멤버도 템플릿화할 수 있어요.
template<typename T>
struct S {
static int count; // 정적 멤버
};
template<typename T>
int S<T>::count = 0; // 정의
변수 템플릿의 특징:
template<>완전 특수화와 부분 특수화를 지원해요.constexpr변수 템플릿은 컴파일 타임 메타프로그래밍에 널리 쓰여요.- 표준 라이브러리에도
std::is_same_v,std::true_type같은 변수 템플릿이 있어요 (접미사_v).
// 표준 타입 특질의 변수 템플릿 형태
static_assert(std::is_integral_v<int>); // 통합 변수 템플릿
변수 템플릿은 타입에 따라 다르게 정의되는 상수·성질·컴파일 타임 값을 표현하는 간결하고 강력한 도구예요.