별의 공부 블로그 🧑🏻‍💻
728x90
728x170

* 함수 템플릿 (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)이라고 부름.

- 단, 함수 오버로드와 함수 템플릿 기능은 사용되어야 하는 상황이 서로 다름.

 함수 오버로드

 함수 내부의 처리 방법이 달라도 관계없는 경우

 함수 템플릿

 함수 내부의 처리 방법이 같아야 하는 경우, 다루는 형이 다를 경우에만 사용할 수 있음.

 

728x90
그리드형(광고전용)

'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
⚠️AdBlock이 감지되었습니다. 원할한 페이지 표시를 위해 AdBlock을 꺼주세요.⚠️
starrykss
starrykss
별의 공부 블로그 🧑🏻‍💻


📖 Contents 📖