명시 지정
반환 타입만으로는 T를 모른다
template <typename T>
T create_zero();
auto n = create_zero<int>();
인자에 T가 없으면 호출부에서 <int> 를 적어야 합니다.
템플릿을 쓰기 전에는 중복 제거 효과뿐 아니라 추론 가능성, 연산 요구, 생성 코드 증가까지 함께 봅니다.
return a + b;처럼 타입만 달라지는가
foo(x)만으로 타입을 알 수 있는가
+, <, begin/end 요구가 타입에 맞는가
template <typename T>
T create_zero();
auto n = create_zero<int>();
인자에 T가 없으면 호출부에서 <int> 를 적어야 합니다.
template <std::totally_ordered T>
T max_value(T a, T b);
오류가 함수 본문 깊은 곳이 아니라 호출 경계에서 짧게 납니다.
중복 감소, 타입 안정성, 런타임 오버헤드 없는 코드 생성
사용 타입이 많으면 컴파일 시간과 생성 코드 크기가 늘어납니다.
타입마다 의미가 달라지면 템플릿보다 명시 오버로드가 읽기 쉽습니다.