클래스 템플릿은 함수보다 특수화가 자주 쓰입니다. 멤버 구조 자체가 달라질 수 있기 때문입니다.
아래 표는 Pair를 만들 때 어떤 정의가 선택되는지를 한 번에 비교합니다.
인스턴스 생성 시 선택되는 정의
정확히 맞는 명시적 특수화가 가장 강하고, 그다음 가장 구체적인 부분 특수화가 선택됩니다.
| 생성 코드 | 맞는 후보 | 선택 | 읽는 법 |
|---|---|---|---|
Pair<int, double> |
Pair<T, U> |
Primary | 두 타입이 서로 달라 기본 정의 사용 |
Pair<int, int> |
Pair<T, T> |
Partial | 두 타입이 같다는 패턴이 더 구체적 |
Pair<int, int*> |
Pair<T, T*> |
Partial | 두 번째 값이 첫 타입의 포인터 |
Pair<const char*, const char*> |
정확히 일치 | Full | C 문자열 비교/출력 규칙을 완전히 대체 |
기본 템플릿
template<T, U>
부분 특수화
template<T> Pair<T,T>
명시적 특수화
template<> Pair<bool,bool>