함수 템플릿의 특수화(Specialization)는 특정 자료형에 대해서만 다른 템플릿 함수를 생성할 수 있도록 커스텀해주는 것이다.
지난 템플릿 포스팅에 사용하였던 Adder 함수 템플릿을 기반으로 예제를 보겠다.
template<>
const char * Adder<const char *>(const char * chr1, const char * chr2)
{
cout << "const char*형 Adder 호출" << endl;
int len = strlen(chr1) + strlen(chr2) + 1;
char * tempstr = new char[len];
strcpy(tempstr, chr1);
strcat(tempstr, chr2);
return tempstr;
}
이 코드가 함수 템플릿 Adder를 const char*형에 대해서 특수화한 것이다.
즉, 우리는 컴파일러에게 이렇게 말한 것이다.
const char *형 함수는 이렇게 특수화를 했으니, const char*형 Adder 템플릿 함수가 필요한 경우에는 별도로 만들지 말고 이것을 써라!
여기 const char * Adder<const char *>에서는 <const char *> 생략 가능하다.
그러나 가급적 명시하는 편이 좋다.
template<> 인 이유는 자료형이 정해져 있기 때문에 T라는 문자가 필요 없기 때문이다.
* Tip
문자열의 선언으로 인해서 반환되는 주소 값의 포인터 형은 const char*이다.
'스터디 > C++' 카테고리의 다른 글
[ C++ ] 배열 클래스의 템플릿화 (0) | 2019.11.30 |
---|---|
[ C++ ] 클래스 템플릿 ( Class Template ) (0) | 2019.11.30 |
[ C++ ] 둘 이상의 자료형(Type)에 대한 템플릿 선언 (0) | 2019.11.29 |
[ C++ ] 함수 템플릿(Function Template)과 템플릿 함수(Template Function) (1) | 2019.11.29 |
[ C++ ] String 클래스 (0) | 2019.11.28 |