본문 바로가기
C++/C++14

C++14 : 변수 템플릿(Variable templates)

by 개발자J의일상 2022. 4. 15.
반응형

이전 버전의 C++에서는 함수, 클래스 또는 타입 별칭만 템플릿화 할 수 있었다. 

C++14에서는 템플릿화된 변수를 생성할 수 있다. 

아래 예제는 다양한 타입에 대한 pi값을 얻기 위해 읽을 수 있는 변수 pi이다 (예: 정수 유형으로 읽을 때 3, float, double, long double, etc로 읽을 때 가장 가까운 값을 얻을 수 있음)

 

템플릿의 일반적인 규칙은 전문화(specialization)를 포함하여 이러한 선언 및 정의에 적용된다.

template<typename T>
constexpr T pi = T(3.141592653589793238462643383);

// Usual specialization rules apply:
template<>
constexpr const char* pi<const char*> = "pi";

 

변수 템플릿 선언

template<class T> // (1) static data member
class GetSize {
  public:
    static const int length = sizeof(T);
};
int value1 = GetSize<double>::length;

template<class T> // (2) variable template
const int variableName = sizeof(T);
int value2 = variableName<double>;

위의 예제와 같이 static data member에 Template을 적용할 수도 있고 (예전에도 가능했음)

C++14부터 value2 = variableName<double> 처럼 variable template을 적용 가능하다. variableName<TYPE>; 여기 TYPE안에 원하는 타입을 넣어주면 된다.

 

https://en.wikipedia.org/wiki/C%2B%2B14#Alternate_type_deduction_on_declaration
https://mariusbancila.ro/blog/2021/12/23/use-cases-of-variable-templates-in-cpp/
https://www.youtube.com/watch?v=A0SVeemaYOA
300x250

댓글