[C++] 함수 템플릿 사용 template<typename T>[C++] 함수 템플릿 사용 template<typename T>

Posted at 2014. 12. 25. 15:02 | Posted in C++



facebook에 글올리기



[C++] 함수 템플릿 사용 template<typename T>


템플릿 함수를 사용하면 컴파일러는 클라이언트(호출 측)의 함수 호출 인자 타입을 보고 템플릿 함수의 매개변수 타입을 결정하여 실제 함수인 템플릿 인스턴스 함수를 만들어 낸다.


서버 함수는 일반화된 기능만을 제공하고 클라이언트가 함수의 매개변수 타입을 결정한다.

이것은 클라이언트가 타입이 다른 함수를 얼마든지 만들어내므로 대단한 확장성을 갖는다.


함수 템플릿은 함수 앞에  template<T> 키워드를 붙이면 된다.

또한, 클라이언트가 매개변수 타입을 결정하도록 타입을 일반화(T 타입)하면 된다.


함수 형식 : template<typename T> void Print(T a, T b);


Colored By Color Scripter

#include <iostream>
using namespace std;

template<typename T>
void Print(T a, T b){
    cout << a << ", " << b << endl;
}

int main(){

    Print<int>(10, 20);    // 명시적
    Print(10, 20);        // 암시적
    
    Print<double>(0.123, 1.123);    // 명시적
    Print(0.123, 1.123);            // 암시적
    
    Print<const char*>("ABC", "abcde");    // 명시적
    Print("ABC", "abcde");                // 암시적

    return 0;
}



컴파일러는 Print<int>(), Print<double>(), Print<const char*>()  3개의 함수를 만들어 낸다.

이 세 함수를 템플릿의 인스턴스라 한다.



템플릿은 두 개의 타입의 매개변수를 가질 수도 있다.


 Colored By Color Scripter

#include <iostream>
using namespace std;

template<typename T1, typename T2>
void Print(T1 a, T2 b){
    cout << a << ", " << b << endl;
}

int main(){

    Print<int, double>(10, 1.5);    // 명시적
    Print(10, 1.5);        // 암시적
    
    Print<const char*, int>("Hello", 100);    // 명시적
    Print("Hello", 100);            // 암시적
    
    Print<double, const char*>(1.5, "Hello");    // 명시적
    Print(1.5, "Hello");                // 암시적

    return 0;
}



이웃추가
facebook에 글올리기

Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기