9.2.1 명시적 템플릿 인수 사용하여 함수 구현
전역 템플릿 함수를 제공하려고 하는데 특정 형식의 인수일 경우에는 템플릿 함수를 기반으로 구체화 된 코드가 만들어지는 것을 피하고 미리 정의된 함수를 사용하게 할 때에는 명시적으로 템플릿 인수를 사용하여 미리 구체화 된 함수를 구현할 수 있습니다. 컴파일러는 명시적으로 구현된 함수와 인수가 일치하면 템플릿 함수를 기반으로 구체화 된 함수를 작성하는 과정이 생략되고 이미 구현된 함수를 호출하도록 컴파일이 됩니다.
MyCompare.h |
template <typename T> int Compare(T t1,T t2) { return t1-t2; } |
Example.cpp |
int Compare<>(const char *str1,const char *str2) { return strcmp(str1,str2); } void main() { if(Compare(10,5)>0) { cout<<"첫번째 인수가 크다."<<endl; } else { cout<<"첫번째 인수가 크지 않다."<<endl; } if(Compare("hello","yahoo")>0) { cout<<"첫번째 인수가 크다."<<endl; } else { cout<<"첫번째 인수가 크지 않다."<<endl; } } |
예제 코드에서 템플릿 인자 형식이 int인 Compare<>함수는 템플릿 코드를 기반으로 컴파일러가 작성하여 이를 호출하도록 할 것입니다. 하지만 템플릿 인자 형식이 const char *인 Compare<>함수는 명시적으로 구현하였기 때문에 Compare("hello","yahoo") 와 같은 호출은 명시적으로 구현된 코드를 호출합니다.
9.2.2 템플릿 인자 형식을 명시하여 호출하기
경우에 따라서 템플릿 인자 형식이 같은 여러 개의 입력 인자를 전달받는 템플릿 함수를 호출할 때 사용하는 입력 인자의 형식이 다르더라도 명시적으로 나타내면 컴파일러는 구체화한 함수를 만들어 줍니다.
가령 앞의 예에서 들었던 템플릿 함수 Compare<>를 호출을 할 때 다음과 같이 호출을 하면 컴파일러는 어떠한 템플릿 인자 형식으로 구체화 해야 하는지 모호(ambigous)하여 [그림 9.2]와 같이 컴파일 오류를 발생합니다.
[그림 9.2]
이와 같은 경우 사용자는 다음과 같이 템플릿 인자 형식을 명시하여 호출을 하여 이를 해결할 수 있습니다.
if(Compare<int>(num,c)>0)
{
cout<<num<<"이"<<c<<"보다 크다."<<endl;
}
else
{
cout<<num<<"이"<<c<<"보다 작거나 같다."<<endl;
}
(모든 동영상 강의는 무료입니다.)
'언어 자료구조 알고리즘 > Escort C++' 카테고리의 다른 글
[C++] OOP 프로그래밍 실습 - 설계 (클래스 다이어그램) (0) | 2016.04.15 |
---|---|
[C++] OOP 프로그래밍 실습 - 요구 분석 (0) | 2016.04.15 |
[C++] OOP 프로그래밍 실습, 개발 공정 및 시나리오 (0) | 2016.04.15 |
[C++] 템플릿 클래스 만들기 (0) | 2016.04.15 |
[C++] 템플릿 클래스 (0) | 2016.04.15 |
[C++] 전역 템플릿 함수 (0) | 2016.04.15 |
[C++] 8. 구조화 된 예외처리 (0) | 2016.04.15 |
[C++] 함수 개체 실습의 Zone 클래스 구현 예제 코드 (0) | 2016.04.15 |
[C++] 함수 개체 (0) | 2016.04.15 |
[C++] 개체 출력자 (0) | 2016.04.15 |