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*> 를 생략한 형태이며, 이를 생햑하지 않고 정의를 하면 다음의 형태가 된다.





특수화하는 자료형 정보를 생략하건 생략하지 않건 그 의미하는 바에 차이가 없으나, 가급적이면 자료형 정보를 명시하는 것이 뜻을 명확히 하는 방법이 된다.


※ 원래는 저렇게 자료형 정보를 표시해야만 했었다.!! 그러므로 저렇게 표시를 하자!! 저렇게 표시만해도 일반 함수인지 아니면 템플릿으로 만들어진 함수인지를 금새 구분하니까~~~!!!

Posted by scii
: