[C/C++] Template

김민석·2022년 5월 10일
0

C/C++

목록 보기
2/7

Template 이란

Template(템플릿)은 자료형에 상관 없는 함수, 클래스를 만들 수 있게 하는 기능이다.
이런 프로그래밍 기법을 Generic Programming(제네릭 프로그래밍)이라고 한다.

함수 Template

template <typename T>
T add(T num1, T num2) {
	return num1 + num2;
}

int main() {
	int num1 = 1, num2 = 2;
    
    cout << add(num1, num2);

	return 0;
}

템블릿을 사용하지 않을 때에는 int형을 위한 add 함수, float형을 위한 add 함수를 따로 만들어주어야 했다.
하지만 위와 같이 템플릿을 사용하면 자료형에 상관 없는 함수를 하나만 만들어주면 된다

클래스 Template

template <typename T>
class Cal
{
private:
    T num1;
    T num2;
public:
    Cal(T num1, T num2) {
        this->num1 = num1;
        this->num2 = num2;
    }
    T add() {
        return num1 + num2;
    }
};

int main() {
	int num1 = 1, num2 = 2;
    
    Cal<int> cal1 = Cal<int>(num1, num2);
    cout << cal1.add();

	return 0;
}

템플릿을 사용하지 않을 때에는 int형을 위한 Cal 클래스, float형을 위한 Cal 클래스를 따로 만들어주어야 했다.
하지만 위와 같이 템플릿을 사용하면 자료형에 상관 없는 클래스를 하나만 만들어주면 된다.

단, 클래스 템플릿을 사용할 때에는 함수 템플릿을 사용할 때와는 다르게 자료형을 표시해주어야 한다.

Template 특수화

template <typename T>
T add (T num1, T num2) {
	return num1 + num2;
}

char* add (char* str1, char* str2) {
	char* str = new char[100];
    
    strcpy(str, str1);
    strcat(str, str2);
    
    return str;
}

모든 자료형을 하나로 통합하는 템플릿 함수/클래스를 사용하다가도 어떤 자료형에 대해서는 다른 기능을 수행하고 싶을 수도 있다. 이때 예외를 두는 기능을 템플릿 특수화라고 한다.

같은 이름으로 다른 기능의 함수를 만들면 된다.

profile
명품개발자지망생

0개의 댓글