반응형
이전 버전의 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
'C++ > C++14' 카테고리의 다른 글
C++14 : 숫자 구분자(Digit separators) (0) | 2022.04.15 |
---|---|
C++14 : 바이너리 리터럴(Binary literals) (0) | 2022.04.15 |
C++14 : 애그리게이트 멤버 초기화(Aggregate member initialization) (0) | 2022.04.15 |
C++14 : 완화된 constexpr 제약 (Relaxed constexpr restrictions) (0) | 2022.04.15 |
C++14 : 함수 반환 타입 추론(Function return type deduction), 선언 시 대체 형 추론(Alternate type deduction on declaration) (0) | 2022.04.15 |
댓글