specialization

템플릿 특수화는 특정 타입에만 다른 구현을 붙인다

명시적 특수화, 부분 특수화, std::vector<bool>, if constexpr는 일반 패턴과 예외 구현의 선택지를 보여 줍니다.

명시적 특수화

전체 특수화 구현

std::string 비교처럼 일반 코드보다 더 맞는 처리가 있을 때 씁니다.

부분 특수화

부분 특수화 조건

클래스 템플릿에서 포인터형, 배열형, const형처럼 타입 계열별 정책을 분리합니다.

vector<bool>

vector<bool> 특수 표현

특수화가 항상 사용성까지 좋아지는 것은 아니라는 예시입니다.

if constexpr

if constexpr 분기

작은 차이는 분기로, 구조 차이는 특수화로 나눠 생각합니다.

예외 범위 특수화가 늘수록 호출자가 실제 동작을 예측하기 어려워집니다.
포인터 타입 char*와 const char*는 문자열 의미와 주소 의미를 구분해야 합니다.
유지보수 일반 템플릿 변경이 특수화에도 반영되는지 따로 살펴야 합니다.