SW개발/C++
C++ 자료형이 아닌 템플릿 매개변수 (Non-type Templates Parameters)
Caniro
2021. 3. 21. 23:59
반응형
자료형이 아닌 템플릿 매개변수 (Non-type Templates Parameters)
템플릿 매개변수는 컴파일 타임에 결정되어야 한다.
- 템플릿의 원리가 여러 경우에 대해 컴파일을 따로 해주는 것이기 때문이다.
Non-type 파라미터를 사용할 경우 헤더에서 함수를 정의한다.
template<typename T, unsigned int T_SIZE>
와 같이unsigned int
가 온다고 생각해보자.모든 숫자에 대해 explicit instantiation을 적용할 수는 없으므로 헤더에서 정의하는 것이다.
예제
main.cpp
#include "MyArray.h"
int main()
{
MyArray<double, 10> my_array;
for (int i = 0; i < my_array.getLength(); ++i)
my_array[i] = i * 0.5;
my_array.print();
}
/* stdout
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5
*/
MyArray.h
#pragma once
#include <iostream>
#include <cassert>
template<typename T, unsigned int T_SIZE>
class MyArray
{
T* data_;
public:
MyArray()
{
data_ = new T[T_SIZE];
}
~MyArray()
{
delete[] data_;
}
T& operator[](int index)
{
assert(index >= 0 && index < T_SIZE);
return data_[index];
}
int getLength()
{
return T_SIZE;
}
void print()
{
for (int i = 0; i < T_SIZE; ++i)
std::cout << data_[i] << ' ';
std::cout << std::endl;
}
};
반응형