C++/Templates
C++ 함수 템플릿 특수화 (Function Templates Specialization)
Caniro
2021. 3. 22. 00:00
함수 템플릿 특수화 (Function Templates Specialization)
템플릿이 있는 상태에서, 특정 자료형에 대해 다른 코드를 실행하고 싶을 때 사용한다.
explicit instantiation과 비슷한 느낌인데, 이렇게 정의된 함수는 템플릿에서 따로 인스턴스화하지 않는다고 생각하면 될 것 같다.
예제
#include "MyArray.h"
using namespace std;
template<typename T>
T getMax(T x, T y)
{
return (x > y) ? x : y;
}
template<>
char getMax(char x, char y)
{
cout << "Warning : comparing chars\n";
return (x > y) ? x : y;
}
int main()
{
cout << getMax(1, 2) << endl;
cout << getMax('a', 'b') << endl;
}
/* stdout
2
Warning : comparing chars
b
*/
템플릿 특수화 코드는 보통 헤더에 같이 집어넣는 듯 하다.
.cpp
파일로 분리하면 적용하기가 번거롭기 때문이다.
앞에
template<>
키워드는 없어도 작동이 되는데, 템플릿 특수화를 표시하기 위해 쓰는 것 같다.