[STL] 함수 템플릿

함수 템플릿
템플릿: 무언가를 만들어 내기 위한 틀

템플릿은 크게 2가지로 나뉩니다. 함수 템플릿과 클래스 템플릿.

함수 템플릿: 여러 함수를 만들어 내기 위한 틀
클래스 템플릿: 여러 클래스를 만들어 내기 위한 틀

 

쉽게 말하면 같은 이름과 매개변수이지만 반환 타입이나 매개변수 타입이 달라서 여러개를 선언하게 되어 중복되는 함수를 줄이기 위해 정의하는 것입니다.

 

선언 방식
template<typename t>
함수 or 클래스 선언{
 T data;
}

 

코드
#include <iostream>
using namespace std;

template<typename T1, typename T2>
void Print(T1 a, T2 b) {
	cout << a << ", " << b << endl;
}

template<typename T, int size>
void PrintArray(T* arr) {
	for (int i = 0; i < size; i++) {
		cout << "[" << i << "]: " << arr[i] << endl;
	}
	cout << endl;
}

int main() {
	Print(10, 1.5);
	Print("hello", 100);
	Print(1.5, "hello!");

	int arr1[5] = { 10,20,30,40,50 };
	PrintArray<int, 5>(arr1); //명시적 호출

	double arr2[3] = { 1.1, 2.2, 3.3 };
	PrintArray<double, 3>(arr2); //명시적 호출

	return 0;
}

 

같은 Print지만 매개변수 타입이 달라서 기존에는 2개의 Print 메소드를 선언해야 했지만

template을 통해 하나의 메소드로 같은 기능을 수행할 수 있게 합니다.

 


클래스 템플릿

클래스도 크게 다르지 않습니다. 클래스 위에 함수와 같이 template을 선언하여 클래스를 선언하고

생성자 매개변수나 멤버변수를 템플릿으로 해주면 됩니다.

 

Array 클래스 템플릿 
#include <iostream>
using namespace std;

template<typename T=int , int capT = 100> //디폴트 매개변수 값 int형, capacity 100 설정
class Array {
	T* buf;
	int size;
	int capacity;

public:
	explicit Array(int cap = capT) : buf(0), size(0), capacity(cap) {
		buf = new T[capacity]; //T자료형 크기 * capacity 만큼 메모리 할당, 기본capacity 100제공
	}

	~Array() {
		delete[] buf;
	}
	
	void add(T data) {
		buf[size++] = data;
	}

	T operator[](int index) const {
		return buf[index];
	}

	int getSize() const {
		return size;
	}
};


int main() {
	Array<> iarr;
	iarr.add(10);
	iarr.add(20);
	iarr.add(30);

	for (int i = 0; i < iarr.getSize(); i++) {
		cout << iarr[i] << " ";
	}
	cout << endl;

	Array<double> darr;
	darr.add(10.12);
	darr.add(20.12);
	darr.add(30.12);

	for (int i = 0; i < darr.getSize(); i++) {
		cout << darr[i] << " ";
	}
	cout << endl;

	Array<string> sarr;
	sarr.add("abc");
	sarr.add("ABC");
	sarr.add("Hello!");

	for (int i = 0; i < sarr.getSize(); i++) {
		cout << sarr[i] << " ";
	}
	cout << endl;

	return 0;
}

 

template선언시 매개변수에 int로 해주면 기본값을 int형으로 한다는 뜻입니다.

반환값도 템플릿 매개변수로 활용할 수 있습니다.

 

결과

 

 

템플릿 클래스와 매개변수는 비슷한 기능을 하는 함수, 클래스가 있으면 굉장히 유용합니다.

'C++ > STL' 카테고리의 다른 글

[STL] STL 시작  (1) 2025.03.01
[STL] 4장 문제풀이  (0) 2025.02.21
[STL] 함수 객체  (0) 2025.02.20
[STL] 함수 포인터 - 콜백 함수  (0) 2025.02.15
[STL] 함수포인터 - 멤버 함수 호출  (0) 2025.02.15