템플릿 정의
타입이 바뀌어도 같은 알고리즘이면 T로 자리를 남깁니다.
template <typename T>
T max(T a, T b)
한 번 작성한 함수 틀은 호출 지점에서 타입을 추론하고, 사용 가능한 연산인지 확인한 뒤 실제 함수 코드로 인스턴스화됩니다.
타입이 바뀌어도 같은 알고리즘이면 T로 자리를 남깁니다.
template <typename T>
T max(T a, T b)
호출 인자의 타입을 비교해 T가 무엇인지 결정합니다.
max(10, 20) -> T=int
본문의 연산을 해당 타입이 지원하는지 컴파일 단계에서 봅니다.
a > b 가능?
필요한 타입에 맞는 실제 함수 코드가 만들어집니다.
int max(int, int)
double, string 같은 다른 타입도 같은 정의에서 출발합니다.
max<double>(x, y)
컴파일러가 구체 함수를 생성하고, 호출 코드는 일반 함수처럼 실행됩니다.
예를 들어 서로 다른 타입을 하나의 T로 맞출 수 없거나, T가 비교 연산을 지원하지 않으면 컴파일 오류가 납니다.