1. 클래스 템플릿(class template)이란,
- C++에서 클래스 템플릿(class template)이란 클래스의 일반화된 선언을 의미한다.
- 함수 템플릿과 동작은 같으며, 그 대상이 함수가 아닌 클래스라는 점만 다르다.
- 클래스 템플릿을 사용하면, 타입에 따라 다르게 동작하는 클래스 집합을 만들 수 있다.
- 클래스 템플릿에 전달되는 템플릿 인수(template argument)에 따라 별도의 클래스를 만들 수 있게 된다.
- 템플릿 인수는 타입이거나 명시된 타입의 상숫값일 수 있다.
2. C++ 클래스 템플릿 정의
template <typename 타입이름>
class 클래스템플릿이름
{
// 클래스 멤버의 선언
}
/*
함수 템플릿과 마찬가지로 템플릿 정의 내에서 typename 키워드
대신에 class 키워드를 사용할 수 있다.
위에서 정의된 타입 이름은 클래스의 선언에서 임의의 타입으로
사용할 수 있다.
*/
3. 클래스 템플릿 예제(Data 클래스)
template <typename T>
class Data
{
public:
Data(T dt);
data(T dt);
T get_data();
private:
T data_;
};
/* 실행 결과
str_data : C++ 수업
int_data : 12
*/
/*
위처럼 클래스 템플릿으로부터 객체를 생성할 때에는 꺾쇠괄호(<>) 안에
템플릿에 전달된 인수 타입을 명시해야 합니다.
전달된 매개변수의 타입을 가지고 컴파일러가 해당 타입에 맞는
함수를 생성해 주는 함수 템플릿과는 달리, 클래스 템플릿은
사용자가 사용하고자 하는 타입을 명시적으로 제공해야 합니다.
*/
4. 클래스 템플릿의 특징
- 하나 이상의 템플릿 인수를 가지는 클래스 템플릿을 선언할 수 있다.
template <typename T, int i>
// 두 개의 템플릿 인수를 가지는 클래스 템플릿을 선언함.
class X
{ ... };
- 클래스 템플릿에 디폴트 템플릿 인수를 명시할 수 있다.
template <typename T = int, int i>
// 디폴트 템플릿 인수의 타입을 int형으로 명시함.
class X
{ ... };
- 클래스 템플릿을 기초 클래스로 하여 상속할 수 있다.
template <typename Type>
class Y : public X <Type> // 클래스 템플릿 X를 상속받음.
{ ... };