Programming Language/C,C++

C++] 일반화와 템플릿

TwinParadox 2017. 6. 28. 12:00
728x90




template 키워드를 사용하면 중복함수들을 일반화시킨 특별한 함수 생성이 가능하다.

이를 템플릿함수(template function) 혹은 제네릭함수(generic function)라고 한다.

C++에서의 템플릿은 함수와 클래스 코드를 일반화시키는 도구



템플릿 함수나 클래스를 작성할 경우,

template이란 키워드를 사용하여 <class T> <typename T>로 제네릭 타입 T를 선언한다.



중복함수를 템플릿화하는 과정의 역과정을 구체화라 하며,

컴파일러는 함수의 호출문을 컴파일하는 경우 구체화를 통해

구체적인 함수의 소스코드를 생성해내며, 이를 구체화된 함수라 한다.





 



#include <iostream>
using namespace std;
class Circle
{
    int radius;
public:
    Circle(int radius = 1) { this->radius = radius; }
    int getRadius() { return radius; }
};
template <class T>
void myswap(T &a, T &b)
{
    T tmp;
    tmp = a;
    a = b;
    b = tmp;
}
int main()
{
    int a = 4, b = 5;
    myswap(a, b);
    cout << "a=" << a << ", b=" << b << endl;
 
    double c = 0.3, d = 12.5;
    myswap(c, d);
    cout << "c=" << c << ", d=" << d << endl;
 
    Circle donut(5), pizza(20);
    myswap(donut, pizza);
    cout << "donut radius=" << donut.getRadius() << ", ";
    cout << "pizza radius=" << pizza.getRadius() << endl;
}



위 소스에서는 세 차례의 함수 구체화 및 호출이 발생함

매개 변수 a, b는 모두 타입 T로 선언된 상태이므로,

두 개의 매개변수의 타입은 동일해야하며 동일하지 않을 경우 컴파일 오류 발생



728x90