728x90

함수 템플릿

: 구체적인 데이터형을 포괄할 수 있는 일반형으로 함수를 정의 (일반화 프로그래밍)

- 특정한 데이터형에 귀속되지 않음

- template <class ___>이라는 키워드로 생성 (template <typenName ___>)

#include <iostream>
using namespace std;

//class 혹은 typeName
template <class Any> //Any: 사용자가 사용할 데이터형이 정해지지 않은 상태
Any sum(Any, Any);

int main() {
    int a = 3;
    int b = 4;
    cout << sum(a,b) << endl; //Any가 int로 매칭

    float c = 3.14;
    float d = 1.592;
    cout << sum(c, d) << endl; //Any가 float로 매칭

//    cout << sum(a, c) << endl; //int와 float이 모두 사용됨
// 처음 함수 원형 선언할 때 Any sum(int, Any)로 바꾸면 주석처리한 코드가 동작함
// 그러나 '일반화' 취지를 더 살리려면, 템플릿에도 오버로딩을 적용함

    return 0;
}

template <class Any>
Any sum(Any a, Any b) {
    return a+b;

템플릿 오버로딩

#include <iostream>
using namespace std;

/*함수 원형 선언*/
template <class Any> //Any: 사용자가 사용할 데이터형이 정해지지 않은 상태
Any sum(Any, Any);
template <class Any>
Any sum(int, Any);

/*main 함수*/
int main() {
    int a = 3;
    int b = 4;
//    cout << sum(a,b) << endl;
    //a, b가 모두 int인 경우는 두 가지 sum에 모두 매칭됨 -> 사용불가

    float c = 3.14;
    float d = 1.592;
    cout << sum(c, d) << endl; //4.732

    cout << sum(a, c) << endl; //6.14

    return 0;
}

/*함수 정의*/
template <class Any>
Any sum(Any a, Any b) {
    return a+b;
}

template <class Any>
Any sum(int a, Any b) {
    return a+b;
}
728x90

+ Recent posts