클래스 템플릿의 특수화

함수 템플릿을 특수화 하는 이유는 특정 자료형에 대해서 구분이 되는 다른 행동을 보이기 위해서이다. 마찬가지로 클래스 템플릿을 특수화하는 이유는 특정 자료형을 기바능로 생성된 객체에 대해, 구분이 되는 다른 행동양식을 적용하기 위해서이다.

template <typename T>
class SoSimple
{
public:
	T SimpleFunc(T num) {}
}

template <>
class SoSimple<int>
{
public:
	[int] SimpleFunc([int] num) {}
}

이렇게 int 형에 대해서 특수화가 되고 나면, 다음의 형태로 객체생성 시,

SoSimple<int> obj;

특수화된 템플릿 클래스 SoSImple<int>를 대상으로 객체가 생성된다.

클래스 템플리스이 부분 특수화

다음과 같이 정의된 클래스가 있다고 가정해보자.

template <typename T1, typename T2>

class MySimple {}

여기서 T1과 T2를 각각 char와 int로 하여 특수화를 진행하면 다음의 형태가 된다.

template<>

class MySimple<char, int> {}

부분적 특수화를 여기서 할 수 있다.

template <typename T1>

class MySimple<T1, int> {}