
함수 템플릿은 함수를 만들어내는 형틀이며 이 형틀에서 만들어진 함수를 템플릿 함수라고 하고, 그 과정을 구체화라고 한다. 구체화 될 때마다 구체화된 타입의 함수가 늘어나고 용량이 증가한다.
template <typename T>
T cast(int s)
{
return (T)s;
}
template <typename T>
void func(void)
{
T v;
cin >> v;
cout << v;
}
void main()
{
unsigned i=cast<unsigned>(1234);
double d=cast<double>(5678);
printf("i=%d, d=%f\n",i,d);
func<int>();
}
함수 호출부에서 이름<타입>(인수)로 인수의 타입을 명시적으로 지정할 수 있다.
정수 1234는 unsigned, 5678은 double로 반환되고 func의 지역변수 T는 int 타입이 된다.
template <class T>
void Swap(T &a, T &b)
{
T t;
t=a;a=b;b=t;
}
template <> void Swap<double>(double &a, double &b)
{
int i,j;
i=(int)a;
j=(int)b;
a=a-i+j;
b=b-j+i;
}
void main()
{
double a=1.2,b=3.4;
printf("before a=%g, b=%g\n",a,b);
Swap(a,b);
printf("after a=%g, b=%g\n",a,b);
}
위 코드는 템플릿이 특정 타입에만 다르게 동작하는 특수화를 이용한 것이다. double 형에 대해서 소수부를 제외한 정수부만 교환한다.
① template <> void Swap<double>(double &a, double &b)
② template <> void Swap<>(double &a, double &b)
③ template <> void Swap(double &a, double &b)
④ void Swap<double>(double &a, double &b)
⑤ void Swap<>(double &a, double &b)
이것들은 모두 특수화 함수를 표기하는 방법이다.
'C++' 카테고리의 다른 글
| [C++] 예외 처리 (0) | 2022.01.07 |
|---|---|
| [C++] 클래스 템플릿 (0) | 2022.01.06 |
| [C++] 순수 가상 함수 (0) | 2022.01.06 |
| [C++] 가상 함수, 가상 파괴자 (0) | 2022.01.05 |
| [C++] 포함, private 상속, public 상속 (0) | 2022.01.05 |