Specialization

특수화 예외 범위

템플릿 특수화는 강력하지만 동작이 여러 곳에 흩어지므로, 일반 템플릿과 오버로딩으로 해결되지 않을 때만 선택합니다.

함수 쪽특정 타입 동작만 바꾸려면 오버로딩이 더 읽기 쉬운 경우가 많습니다.
클래스 쪽전체 구조가 달라질 때 명시적 또는 부분 특수화를 사용합니다.
primary

기본 템플릿 배치

대부분의 타입이 따를 공통 구현을 충분히 일반적으로 작성합니다.

full

정확한 타입을 대체합니다

Storage<bool>처럼 한 타입 조합 전체를 다른 구현으로 바꿉니다.

partial

타입 패턴을 분리합니다

포인터 타입, 배열 타입처럼 일부 인수 형태에 공통 규칙을 줄 수 있습니다.

남용 위험동작이 타입마다 흩어져 디버깅과 유지보수가 어려워집니다.
배치특수화 정의도 필요한 번역 단위에서 보이도록 헤더 전략을 맞춥니다.
선택 순서일반 구현, 오버로딩, 부분 특수화, 명시적 특수화 순으로 좁혀 봅니다.

예외 규칙 특수화는 “템플릿을 더 많이 쓰는 기술”이 아니라 예외 규칙의 범위를 정확히 제한하는 기술입니다.