C++/Templates
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<>
키워드는 없어도 작동이 되는데, 템플릿 특수화를 표시하기 위해 쓰는 것 같다.
'C++ > Templates' 카테고리의 다른 글
C++ 템플릿 부분 특수화 (Templates Partial Specialization) (0) | 2021.03.22 |
---|---|
C++ 클래스 템플릿 특수화 (Class Templates Specialization) (0) | 2021.03.22 |
C++ 자료형이 아닌 템플릿 매개변수 (Non-type Templates Parameters) (0) | 2021.03.21 |
C++ 클래스 템플릿 (Class Templates) (0) | 2021.03.21 |
C++ 함수 템플릿 (Function Templates) (0) | 2021.03.21 |