C++/Templates
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;
}
};
'C++ > Templates' 카테고리의 다른 글
C++ 클래스 템플릿 특수화 (Class Templates Specialization) (0) | 2021.03.22 |
---|---|
C++ 함수 템플릿 특수화 (Function Templates Specialization) (0) | 2021.03.22 |
C++ 클래스 템플릿 (Class Templates) (0) | 2021.03.21 |
C++ 함수 템플릿 (Function Templates) (0) | 2021.03.21 |
C++ 템플릿 (Templates) (0) | 2021.03.21 |