함수 템플릿 - 함수의 일반화 서술
template <typename T>
void Swap(T &a, T &b)
{
T temp;
temp = a;
a = b;
b = temp;
}
명시적 특수화
-
함수 이름이 하나 주어지면, 사용자는 템플릿이 아닌 함수, 템플릿 함수, 명식적 특수화 템플릿 함수를 가질수 있다.
-
명시적 특화를 하기 위한 원형과 정의 앞에 template<>가 와야 한다. 그리고 그 특수형의 이름을 서술해야한다.
Test형 구조체를 교환하는 세 가지 형식의 함수원형
//템플릿이 아닌 함수 원형
void Swap(Test &, Test &);
//템플릿 원형
template <class T>
void Swap(T &, T &);
//Test형을 위한 명시적 특수화
template <> void Swap<Test>(Test &, Test &);
세 가지의 함수가 공존할 때에는
일반함수 > 명시적특수화 > 템플릿 원형
순으로 컴파일러는 선택
구체화와 특수화
- 구체화
컴파일러가 특정 데이터형에 맞는 함수 정의를 생성하기 위해 템플릿을 사용할 때, 그 결과를 템플릿의 구체화(instantiation) 라 한다.
- 암시적 구체화
특정 데이터형 매개변수를 요구하는 함수를 사용한다는 사실을 컴파일러에게 알림으로써 그에 맞는 함수정의를 만들 필요가 있다는 것을 컴파일러가 암시적으로 인식하는 것.
- 명시적 구체화
명시적으로 구체화를 하는 것.
template void Swap<int>(int, int); //int형으로 명시적으로 구체화
반응형