티스토리 뷰
템플릿 template
(http://oyang-life.tistory.com/6)
1. 함수 테플릿
2. 클래스 템플릿 (참조 : 함수 템플릿 참조: http://petra.tistory.com/1096)
1. 함수 템플릿
int MyAddFunc(int a, int b)
{
return a + b;
}
double MyAddFunc(double a, double b)
{
return a + b;
}
이처럼 덧셈을 하는 경우 자료형에 따라 각 함수를 만들어야 했다.
template <typename T>
T MyAddFunc(T a, T b)
{
return a + b;
}
int _a = 1, _b = 2, _c;
c = MyAddFunc(_a, _b); // int형으로 덧셈
double _d = 1.0, _e = 2.0, f;
f = MyAddFunc(_d, _e); // double형으로 덧셈
함수 템플릿을 만들면 함수 인자의 자료형에 따라 적용된다. 자료형이 여러개여도 한번만 만들면 모든 자료형에 적용 가능하다.
==================
template <typename T1, typename T2>
void showFunc(T1 a, T2 b) // T1과 T2의 자료형은 같을 수도 있고, 다를 수도 있다.
{
cout << a << endl;
cout << b << endl;
}
===================
자료형의 크기를 리턴하는 템플릿 함수를 만들면
template <typename T>
int GetSize(T a)
{
return sizeof(a);
}
이렇게 만든다. 그런데 포인터인 경우 포인터 크기가 아닌 포인터에 할당된 데이터 크기를 리턴해줘야 하므로 함수 템플릿의 특수화가 필요하다.
template <> // 함수 템플릿의 특수화
int GetSize(char* a)
{
return strlen(a);
}
인수가 문자형 포인터를 갖는 GetSize()는 이 함수를 호출하고, 그외 인수들은 위 함수를 호출한다.