2024. 8. 4. 20:09ㆍ프로그래밍 언어/C++ Template
C++14에서 도입된 기능으로, 변수도 템플릿으로 정의하고 특정 타입에 대해 특수화할 수 있게 해준다.
이를 기반으로 타입에 대한 서로 다른 값을 가지는 변수를 정의할 수 있다.
다양한 타입에 대해 서로 다른 값을 가지는 상수나 설정값을 정의할 수 있어, 코드의 가독성이 높아지고 유지보수가 유리해진다.
예제는 ChatGPT를 사용해서 생성해 보았다.
예시 1:
기본 변수 템플릿
template<typename T>
constexpr T pi = T(3.1415926535897932385);
변수 템플릿 특수화
template<>
constexpr int pi<int> = 3;
타입이 int이면 pi<int>로 정수형 '3'의 값을 가지게 된다.
이 예제를 전체 코드로 보면
#include <iostream>
// 변수 템플릿 정의
template<typename T>
constexpr T pi = T(3.1415926535897932385);
// int 타입에 대한 특수화
template<>
constexpr int pi<int> = 3;
int main() {
std::cout << "pi<double> = " << pi<double> << std::endl; // 기본 템플릿 사용 double 타입으로 (3.141592653589793)
std::cout << "pi<float> = " << pi<float> << std::endl; // 기본 템플릿 사용 float 타입으로 (3.141592653589793)
std::cout << "pi<int> = " << pi<int> << std::endl; // 특수화된 템플릿 사용 int 타입의 (3)
return 0;
}
예시 2:
특정 타입에 대한 설정값
예시는 데이터 타입에 대한 다른 초기 버퍼 크기를 정의하는 예시 입니다.
#include <iostream>
// 기본 버퍼 크기 템플릿
template<typename T>
constexpr std::size_t buffer_size = 1024;
// 특수화: char 타입에 대한 버퍼 크기
template<>
constexpr std::size_t buffer_size<char> = 2048;
// 특수화: int 타입에 대한 버퍼 크기
template<>
constexpr std::size_t buffer_size<int> = 512;
int main() {
std::cout << "buffer_size<double> = " << buffer_size<double> << std::endl; // 기본 템플릿 사용 1024
std::cout << "buffer_size<char> = " << buffer_size<char> << std::endl; // 특수화된 템플릿 사용 2048
std::cout << "buffer_size<int> = " << buffer_size<int> << std::endl; // 특수화된 템플릿 사용 512
return 0;
}
참고
Variable template: https://en.cppreference.com/w/cpp/language/variable_template
Variable template (since C++14) - cppreference.com
A variable template defines a family of variables or static data members. [edit] Syntax template < parameter-list > variable-declaration (1) template < parameter-list > requires constraint variable-declaration (2) (since C++20) [edit] Explanation A variabl
en.cppreference.com
'프로그래밍 언어 > C++ Template' 카테고리의 다른 글
auto -> decltype(표현식) (0) | 2024.08.11 |
---|