본문 바로가기

C++/C++ 문법

[C++] 템플릿 매개변수, 비타입 템플릿 매개변수 (NonType Template Parameter)

728x90
반응형

템플릿 매개변수

 

템플릿을 사용할 때 template <typename T> 와 같이 사용한다고 했었다.

 

이때 typename T 와 같이 정의되지 않은 자료형을 사용하기 위한 변수를 타입 매개변수 라고 한다.

 

 

 

 

 

 

비타입 템플릿 매개변수

 

타입 매개변수 자리에 그냥 변수가 올 수도 있는데 이것을 비타입 템플릿 매개변수라고 한다.

 

사용하는 방법은 템플릿 매개변수와 동일하다.

 

따라서 아래 코드처럼 사용할 수 있다.

 

#include <iostream>

template <int SIZE>
class TestClass {
private:
	int arr[SIZE];
};

int main()
{
	TestClass<15> test1;
	return 0;
}

 

 

 

 

 

 

 

템플릿 매개변수 활용

 

비타입 템플릿 매개변수와 타입 매개변수를 함께 사용하는 것도 가능하다.

 

이를 활용하여 아래 코드처럼 어떤 타입의 배열도 담을 수 있는 클래스를 선언할 수 있다.

 

#include <iostream>
using namespace std;

template <typename T, size_t SIZE>
class Array {
private:
	T data[SIZE];
};

int main() {
	Array <int, 10> arr;
	return 0;
}

 

 

 

 

 

 

 

템플릿 매개변수의 디폴트 값

 

템플릿 매개변수도 함수의 매개변수를 선언할 때처럼 디폴트 값을 설정할 수 있다.

 

따라서 아래 코드처럼 활용하는 것이 가능하다.

 

#include <iostream>
using namespace std;

template <typename T = int, size_t SIZE = 10>
class Array {
private:
	T data[SIZE];
public:
	Array() {
		for (size_t i = 0; i < SIZE; i++)
			data[i] = 65 + i;
	}
	void PrintArray() {
		for (size_t i = 0; i < SIZE; i++)
			cout << data[i] << endl;
	}
};

int main() {
	Array <> arr1;
	Array <double> arr2;
	Array <char, 5> arr3;
	arr1.PrintArray();
	arr2.PrintArray();
	arr3.PrintArray();
	return 0;
}

 

 

 

 

 

 

728x90
반응형