더북(TheBook)

larger 함수 템플릿은 두 인수 중에 더 큰 인수를 반환한다. larger 함수 템플릿 사용의 유일한 제약 사항은 인수에 > 비교를 할 수 있는 타입을 사용해야 한다는 것이다. 타입 매개변수 T가 생성될 템플릿 인스턴스를 결정한다. 컴파일러는 larger()에 사용한 인수에서 타입을 추론하지만, 타입을 직접 지정할 수도 있다. larger()가 타입을 어떻게 추론하는지 살펴보자.

std::string first {"To be or not to be"};
std::string second {"That is the question."};
std::cout << larger(first, second) << std::endl;

이 코드를 실행하려면 string 헤더를 선언해야 한다. 컴파일러는 T에 쓰인 인수를 string 타입으로 추론할 것이다. 타입을 직접 지정하고 싶다면 larger<std::string>(first, second)처럼 작성할 수도 있다. 함수 인수의 타입이 다를 때는 템플릿의 인수 타입을 지정해야 한다. larger(2, 3.5)처럼 작성하면 타입이 int도 될 수 있고, double도 될 수 있으므로 컴파일러는 타입이 모호하다고 여겨 T의 타입을 추론하지 못한다. 타입을 모호하게 작성하면 오류 메시지만 받아볼 뿐이다. larger<double>(2, 3.5)처럼 타입을 명시적으로 지정해야 문제가 해결된다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.