1. 일반화 프로그래밍(generic programming)


2. 템플릿(template)이란,

  1. 매개변수의 타입에 따라 함수나 클래스를 생성하는 매커니즘을 의미한다.
  2. 타입이 매개변수에 의해 표현되므로, 매개변수화 타입(parameterized type)이라고도 불린다.
  3. 템플릿을 사용하면 타입마다 별도의 함수나 클래스를 만들지 않고, 여러 타입에서 동작할 수 있는 단 하나의 함수느 클래스를 작성하는 것이 가능하다.

3. 함수 템플릿(function template)

4. 함수 템플릿 예제(Swap() 함수)

template <typename T>

void Swap(T& a, T& b);

int main(void)
{
    int c = 2, d = 3;

    cout << "c : " << c << ", d : " << d << endl;

    Swap(c, d);

    cout << "c : " << c << ", d : " << d << endl;

    string e = "hong", f = "kim";

    cout << "e : " << e << ", f : " << f << endl;

    Swap(e, f);

    cout << "e : " << e << ", f : " << f << endl;

    return 0;
}

 

template <typename T>

void Swap(T& a, T& b)
{
    T temp;
    temp = a;

    a = b;
    b = temp;
}

/* 실행 결과
c : 2, d : 3
c : 3, d : 2
e : hong, f : kim
e : kim, f : hong
*/

5. 함수 템플릿의 인스턴스화

함수 템플릿이 각각의 타입에 대해 처음으로 호출될 때, C++ 컴파일러는 해당 타입의 인스턴스를 생성한다.