본문 바로가기
스터디/C++

[ C++ ] 함수 템플릿의 특수화(Specialization)

by 알 수 없는 사용자 2019. 11. 29.

함수 템플릿의 특수화(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*이다.