본문 바로가기
스터디/C++

[ C++ ] 클래스 템플릿의 특수화( Class Template Specialization )

by 알 수 없는 사용자 2019. 12. 1.

이전에 함수 템플릿의 특수화에 대해 포스팅을 한 적이 있다.

함수 템플릿을 특수화하는 이유는 특정 자료형에 대해서는 개발자가 커스텀한 다른 템플릿 함수를 생성하기 위해서이다. 이처럼 클래스 템플릿을 특수화하는 이유는 특정 자료형에 대해서는 다르게 구분이 되는, 템플릿 클래스의 객체를 생성하기 위해서이다.

 

 

예제를 보자.

Hello 클래스 템플릿을 double형에 대해서 특수화하였다. 그래서 double형으로 Hello 객체를 생성 시에 특수화한 부분을 기반으로 객체가 생성된 것을 확인할 수 있다.

 

그럼 Hello 클래스에 typename을 하나 더 뒀다고 생각해보자.

template <typename T1, typename T2>
class Hello { ... }

 

그럼 이에 대하여 char형으로 특수화를 시키면 다음과 같이 될 것이다.

template <>
class Hello<char, char> { ... }

 

근데 여기서 우리는 T2만을 int형으로 바꿀 수 있다.

template <typename T1>
class Hello<T1, int> { ... }

그래서 이를 가리켜 우리는 클래스 템플릿의 부분 특수화(Class Template Partial Specialization)라고 한다.

 

그럼 예제를 보자.

이렇게 <T1, int>에 대해서 부분 특수화를 하였고, <double, int>에 대하여 특수화를 하였다.

 

원활하게 결과가 나오는 것을 확인할 수 있었다.