* 함수 템플릿 (Function Template)
- 함수 템플릿(Fundtion Template) : 다루는 형만 다른 함수를 틀을 통해 찍어내듯 만들어낼 때 필요한 틀.
- 순서
1. 함수 템플릿을선언 및 정의
2. 함수 호출 (함수가 자동으로 만들어짐.)
(1) 함수 템플릿 정의
template <class 템플릿 인수 목록> // 상황에 맞추어 변경시킬 형(type)의 이름을 지정함. 함수의 선언 혹은 정의 |
- <...> 부분에는 템플릿 인수라는 것을 집어 넣음.
- 템플릿 인수에는 T와 같은 임시 형(type) 이름을 넣음.
- 함수 템플릿의 가인수형명은 템플릿 인수임.
- 가인수의 구체적인 형(type) 이름 대신 T와 같은 임시 형(type) 이름을 사용함.
- 함수 템플릿은 함수의 '틀'이 됨.
1
2
3
4
5
6
7
8 |
// 함수 템플릿
template <class T> // T와 같은 임시 형(type) 이름을 넣음
T maxt(T x, T y) {
if (x > y)
return x;
else
return y;
} |
cs |
(2) 함수 템플릿 이용하기
- 함수 템플릿의 사용법은 일반적인 함수의 사용법과 동일함.
- 함수 템플릿을 호출하도록 코드를 작성하면, 코드를 컴파일할 때, 템플릿 인수 T를 지정된 형으로 바꾼 함수를 생성하게 됨.
-> 즉, 코드에서 함수 템플릿을 호출하면, 그로 인해 구체적인 형(type)을 다루는 함수가 호출됨.
- 예)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 |
#include <iostream>
using namespace std;
// 함수 템플릿
template <class T>
T maxt(T x, T y) {
if (x > y)
return x;
else
return y;
}
int main() {
int a, b;
double da, db;
cout << "정수 2개를 입력하십시오. \n";
cin >> a >> b;
cout << "소수 2개를 입력하십시오. \n";
cin >> da >> db;
int ans1 = maxt(a, b); // 템플릿 인수 T를 int형으로 바꾼 함수가 호출됨.
double ans2 = maxt(da, db); // 템플릿 인수 T를 double형으로 바꾼 함수가 호출됨.
cout << "입력받은 정수의 최대 값은 " << ans1 << "입니다. \n";
cout << "입력받은 소수의 최대 값은 " << ans2 << "입니다. \n";
return 0;
} |
cs |
- 함수 템플릿은, 다루는 형을 제외한 다른 요소가 완전히 동일한 함수를 단 한번만 정의할 수 있다는 편리한 기능을 제공함.
- 함수 템플릿에 실인수를 넘기면 그 형을 다루는 함수가 만들어짐.
(3) 함수 오버로드와 함수 템플릿
- '함수 오버로드'와 '함수 템플릿'은 다른 처리를 하는 함수들을 같은 이름으로 호출하기 위해 마련된 기능임.
- 이처럼, 하나의 이름이 상황에 맞추어 다른 기능을 가지는 것을 일컬어 다형성(polyporphism)이라고 부름.
- 단, 함수 오버로드와 함수 템플릿 기능은 사용되어야 하는 상황이 서로 다름.
함수 오버로드 |
함수 내부의 처리 방법이 달라도 관계없는 경우 |
함수 템플릿 |
함수 내부의 처리 방법이 같아야 하는 경우, 다루는 형이 다를 경우에만 사용할 수 있음. |
'Programming > C++' 카테고리의 다른 글
[STL] ceil, floor, round (0) | 2017.09.23 |
---|---|
[STL] sort (0) | 2017.09.22 |
C++ Character Literals (0) | 2017.09.02 |
인수와 레퍼런스 (0) | 2017.05.30 |
함수 오버로드 (Function Overloading) (0) | 2017.05.25 |
기본 인수 (Default Argument) (0) | 2017.05.25 |
인라인 함수 (Inline Function) (0) | 2017.05.25 |
const (0) | 2017.05.25 |