함수 템플릿의 특수화(Specialization)
Programming/C++ 2012. 10. 10. 20:50 |16행: 여기서는 문자열을 대상으로 호출하고 있다. 하지만 그 결과에 대해서는 아무런 의미도 부여할 수 없게 된다. (단순히 주소 값의 비교결과가 반환되므로)
만약에 문자열의 길이비교가 목적이라면 다음의 형태로 템플릿 함수가 구성되어야 의미가 있다.
const char* Max(const char* a, const char* b)
{
return strlen(a) > strlen(b) ? a : b;
}
만약, 사전편찬 순서의 비교가 목적이라면...
const char* Max(const char* a, const char* b)
{
return strcmp(a, b) > 0 ? a : b;
}
이렇듯 상황에 따라서 템플릿 함수의 구성방법에 예외를 둘 필요가 있는데, 이 때 사용되는 것이 "함수 템플릿의 특수화(Specialization of Function Template)" 이다.
11~16행: 함수 템플릿 Max를 char* 형에 대해서 특수화 하였다.
18~23행: 함수 템플릿 Max를 const char* 형에 대해서 특수화 하였다.
위 예제의 다음 정의는,
template <>
char*~~~
{
...
}
컴파일러에게 다음의 메시지를 전달하는 것이다.
"char* 형 함수는 내가 이렇게 제시를 하니, char* 형 템플릿 함수가 필요한 경우에는 별도로 만들지말고 이것을 써라."
그리고 이 두 '함수 템플릿의 특수화' 정의는 특수화하는 자료형의 정보 <char*>, <const char*> 를 생략한 형태이며, 이를 생햑하지 않고 정의를 하면 다음의 형태가 된다.
특수화하는 자료형 정보를 생략하건 생략하지 않건 그 의미하는 바에 차이가 없으나, 가급적이면 자료형 정보를 명시하는 것이 뜻을 명확히 하는 방법이 된다.
※ 원래는 저렇게 자료형 정보를 표시해야만 했었다.!! 그러므로 저렇게 표시를 하자!! 저렇게 표시만해도 일반 함수인지 아니면 템플릿으로 만들어진 함수인지를 금새 구분하니까~~~!!!
'Programming > C++' 카테고리의 다른 글
클래스 템플릿의 선언과 정의의 분리 (1) | 2012.10.11 |
---|---|
클래스 템플릿(Class Template) (0) | 2012.10.11 |
Template (0) | 2012.10.10 |
string 클래스의 디자인 (0) | 2012.10.09 |
임시객체로 자동 형 변환과 형 변환 연산자(Conversion Operator) (0) | 2012.10.08 |