카테고리 없음

template (템플릿)

zuyo 2019. 5. 9. 02:09
반응형

템플릿은 함수를 만들어 내는 형틀같은 것으로, 함수의 기능은 결정되어 있으나, 함수의 자료형은 결정되어 있지 않다.
템플릿을 이용하면 다양한 자료형의 함수를 만들어 낼 수 있다.

#include <iostream>
using namespace std;

template <typename T> // T라는 이름으로 템플릿을 정의. typename대신 class를 써도 된다.
T Add(T num1, T num2) {
	return num1 + num2;
}

double Add(double num1, double num2) { // 일반함수
	return num1+num2;
}

void main() {
	cout << Add(15, 20) << endl; // 35
	cout << Add(2.9, 3.7) << endl; // 6.6
	cout << Add(3.2, 3.2) << endl; // 6 (자동으로 변환)
	cout << Add(3.14, 2.75) << endl; // 5.89
        cout << Add(6, 13) << endl; // 19 (자료형을 명시하지 않은 경우, 타입을 컴파일러가 자동으로 결정)
        cout << Add(2.9, 3.7) << endl; // 6.6 (자료형을 명시하지 않은 경우, 일반 함수가 있으면 일반 함수 우선 호출)
}

두 개 이상의 자료형(Type)이 들어갈 수 있는 템플릿 선언

#include <iostream>
using namespace std;

template <typename T1, typename T> // 자료형 여러개 정의 가능
void ShowData(double num) { // 이렇게 템플릿 자료형뿐만 아니라 일반 자료형도 가능
	cout << (T1)num << ", " << (T2)num << endl; // T1(num), T2(num) 로도 쓸 수 있다.
}

void main() {
	ShowData <char, int> (65);
	ShowData <char, int> (67);
	ShowData <char, double> (68.9);
	ShowData <short, double> (69.2);
	ShowData <short, double> (70.4);
	return 0;
}

* 참고로 C++에서는 데이터에 소괄호를 묶는 형태로 형 변환을 할 수 있다. 즉 아래 두 문장은 같은 것이다.

int num = (int)3.14;
int num = int(3.14);
반응형