specialization
함수 템플릿은 한 타입의 예외와 오버로드를 먼저 구분한다
특정 타입만 다르게 처리할 때는 예외가 후보 선택을 흐리지 않게 해야 한다.
오버로드함수 후보를 하나 더 둠
명시 특수화템플릿 구현을 한 타입만 대체
우선순위일반 함수가 더 직접적
의도호출 규칙이 단순해야 함
| 구분 | 판단 기준 | 다음 행동 |
|---|---|---|
| print(int) | 일반 함수가 있으면 가장 명확 | 오버로드 우선 검토 |
| print<T> | 대부분 타입의 공통 구현 | 기본 템플릿 유지 |
| print<char*> | 정말 한 타입만 의미가 다름 | 명시 특수화 후보 |
핵심 함수 쪽 예외는 먼저 오버로드로 설명되는지 보고, 특수화는 마지막에 좁게 쓴다.