특수화 기준표

일반 템플릿에서 시작해 가장 구체적인 후보를 고릅니다

기본 구현이 먼저 있고, 특정 타입은 명시적 특수화가 덮어씁니다. 클래스 템플릿은 타입 패턴을 남겨 두는 부분 특수화까지 선택지에 포함됩니다.

1순위 정확히 맞는 명시적 특수화
2순위 가장 구체적인 부분 특수화
기본값 남은 타입은 일반 템플릿
01 일반 템플릿

모든 타입이 공유할 기본 의미를 정의합니다.

template<typename T>
02 명시적 특수화

특정 타입 하나가 완전히 다른 구현을 갖습니다.

MyValue<bool>
03 부분 특수화

클래스 템플릿에서 포인터나 두 번째 타입 같은 패턴을 고정합니다.

Pair<T, int>
04 선택 우선순위

컴파일러는 사용 가능한 후보 중 더 구체적인 정의를 선택합니다.

most specialized
특수화 후보어떤 후보가 맞는가?
일반 템플릿타입이 달라도 의미가 같습니다.
명시적 특수화정확한 타입 하나를 바꿉니다.
부분 특수화타입 패턴 일부만 고정합니다.
주의점후보가 겹치면 구체성이 중요합니다.
언제 쓰나기본 구현에서 벗어나는 정도
기본 선택대부분의 타입에 먼저 적용합니다.
정확한 예외const char*, bool처럼 의미가 달라질 때
패턴 예외T*, Pair<T, int>처럼 형태가 맞을 때
남용 금지기본 타입 성능 기대만으로 늘리지 않습니다.
함수 템플릿부분 특수화 가능 여부
가능일반 함수 템플릿을 정의합니다.
가능정확히 맞는 타입으로 전체 특수화합니다.
불가함수는 오버로딩이나 if constexpr를 검토합니다.
권장 흐름함수는 특수화보다 오버로드가 더 읽기 쉽습니다.