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

2019. 7. 30. 00:10 기타/C++

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


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


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

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


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

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


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


#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개의 함수를 만들어 낸다.

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



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


#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;
}



출처: https://hyeonstorage.tistory.com/316?category=601868 [개발이 하고 싶어요]