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
'Programming Language > C,C++' 카테고리의 다른 글
C++] 상속 관계에서의 오버로딩(함수 중복) (0) | 2017.07.02 |
---|---|
C++] 가상함수 호출과 오버라이딩 (66) | 2017.07.01 |
C++] 추상 클래스 (0) | 2017.06.26 |
C++] 참조에 의한 호출로 객체 전달 (0) | 2017.06.21 |
C] memset, memcmp (0) | 2017.06.04 |