템플릿에는 ‘모형자’라는 뜻이 담겨있다.

함수를 대상으로 템플릿 이해하기

다음은 모형자의 특징이다.

“모형을 만들어 낸다. 모형의 틀은 결정되어 있지만, 모형의 색은 결정되어 있지 않아서 결정해야 한다.”

그럼 이번에는 ‘함수 템플릿’이란 것의 특징을 소개하겠다.

“함수 템플릿은 함수를 만들어 낸다. 함수의 기능은 결정되어 있지만, 자료형은 결정되어 있지 않아서 결정해야 한다.”

‘함수 템플릿’이라는 것은 함수를 만드는 도구가 된다.

함수 템플릿이 만들어 내는 함수의 자료형도 결정되어 있지 않다. 함수 템플릿도 다양한 자료형의 함수를 만들어 낼 수 있다.

int Add(int num1, int num2)
{
	return num1 + num2;
}
//using template
T Add(T num1, T num2)
{
return num1 + num2;
}
//함수의 기능 덧셈
//함수의 자료형 결정되어 있지 않음.

그리고 다음과 같이 완성시켜야 한다.

template <typename T>
T Add(T num1, T num2)
{
	return num1 + num2;
}

템플릿 정의에 다음 문장이 존재한다.

template <typename T>

typename 을 대신해서 class 를 사용할 수도 있다

template <typename T>
//or
tmeplate <class T>

int형 덧셈을 진행하는 Add 함수

double형 덧셈을 진행하는 Add 함수

를 만든다고 할때 template 을 사용하면 컴파일러가 함수의 호출문장을 보면서 필요한 함수들을 만들어낸다.

int main(void)
{
	cout << Add<int> (15, 20) << endl;
	cout << Add<double> (2.2, 3.3) << endl;
}

컴파일러가 줄들을 스캔하면서 위와같은 문장을 만나면 첫번쨰 줄에서 int 형의 함수를, 두번쨰 줄에서 double 형 함수를 만들게 된다. 함수는 한번 만들어지면 똑같은 형이 불리는 경우 다시 만들지 않는다.

컴파일시 함수가 만들어지기 때문에 컴파일 속도는 줄어 든다. 그러나 이것은 컴파일 속도이지 런타임 (실행속도) 가 아니다.

cout << Add<int>(3.2, 3.2) << endl;

위와 같이 실행할 경우 int 형으로 실행되어 6을 반환하게 된다.