스터디/C++
[ C++ ] 함수 템플릿의 특수화(Specialization)
알 수 없는 사용자
2019. 11. 29. 18:48
함수 템플릿의 특수화(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*이다.