{ 이번 장은 "1부, 템플릿 기본"에 속해 있다. 함수 템플릿이 무엇인가? 다양한 데이터형에 호출 되는 함수이다. 어떻게 함수 템플릿을 정의 하는가? 다음 처럼 정의 할 수 있다. // function family definition template T const& max( T const & a, T const& b ) { return a < b ? b : a; } 우선 fuction family 는 함수 템플릿을 가리키는 말인 것을 밝힌다. const 의 사용 법은 1장에서 말했던 규칙 데로 사용 됬다. 본론으로 들어와서 max 함수 템플릿은 a 와 b 중 큰 값을 리턴하며, 이때 a와 b의 타입은 아직 정해지지 않았으며, 타입을 typename T로 파라미터화 했다. 이 typename T를 템플릿..
함수 템플릿 검색 결과
함수 템플릿의 경우 템플릿 매개변수가 함수의 인자에서 추론 될 수 있음을 알게 되었다. 이 추론 때문에, 함수 오버로딩이란 기능을 이용하기 위해선, 몇가지 규칙을 이해하고 있어야 하는 리스크가 있다. 물론 함수 템플릿을 사용 하는것에 비하면 아무것도 아니지만...우선 코드를 보고, 어느게 호출 될지 생각해 보자. #include template T sqrt( T ); template T std::complex sqrt( std::complex ); double sqrt( double ); void f( std::complex z ) { sqrt( 2 ); sqrt( 2.0 ); sqrt( z ); } 13, 14, 15 라인에서 어떤 함수가 호출 될 것이라고 생각 하는가? 13 라인에선 맨 위의 함수 템..
시작하기 앞서 한가지 중요한 사실을 짚어 본다면 " 함수 템플릿에서 템플릿 매개변수는 함수의 인자에 의해서 추론 된다" 를 알고 있어야 할것 같다. 이 추론 될 수 있음으로 추론 되는 방법을 알아야 되기 때문이다. 이 추론 되는 방법은 함수 오버로딩과 깊은 연관이 있으며, 어떤 함수를 호출할지도 판별하게 되기 때문이다. 우선 컴파일러는 함수 호출 문을 보고, 템플릿 매개변수와 매칭을 시키는데, 이때 함수의 인자가 함수의 템플릿 매개변수를 모두 사용 할 때, 인자를 템플릿 매개변수로써 판별 할 수 있다. 만약 템플릿 매개변수를 함수의 인자로 모두 사용 하지 않는 다면, 명시적으로 에 넣어 주어야만 한다. 이 함수 템플릿과 클래스 템플릿의 큰 차이는 바로 이 추론에 있다. 함수 템플릿은 인자로 추론하여, 템..
최근댓글