특수화를 쓰기 전에는 기본 템플릿, 함수 오버로딩, if constexpr로 해결되는지 먼저 확인합니다.
아래 판단표에서 오른쪽으로 갈수록 코드의 예외 규칙이 강해집니다.
결정 기준
문제가 무엇인지에 따라 선택지가 달라집니다.
| 상황 | 먼저 선택 | 특수화가 맞는 순간 | 피해야 할 신호 |
|---|---|---|---|
| 대부분 타입이 같은 의미 | 기본 템플릿 | 한 타입만 저장 방식이 완전히 다름 | 성능 추측만으로 분기 |
| 함수 동작만 다름 | 오버로딩 | 템플릿의 특정 타입 의미를 명시적으로 대체 | 호출 해석이 더 복잡해짐 |
| 타입 패턴 전체가 다름 | 부분 특수화 | T*, T,T처럼 패턴이 반복됨 |
패턴끼리 우선순위가 애매함 |
| 컴파일 시 조건 분기 | if constexpr |
클래스 구조 자체를 바꿔야 함 | 런타임 조건처럼 남용 |
A. 특수화해도 되는 경우
bool, const char*처럼 의미가 달라집니다.B. 다른 도구가 나은 경우
if constexpr가 한 파일 안에서 더 읽히기도 합니다.