9-3. 템플릿 메타 프로그래밍 (Template Meta Programming)
컴파일 타임에 모든 연산을 해보자
/* 나만의 std::array 구현 */
#include <iostream>
template <typename T, unsigned int N>
class Array {
T data[N];
public:
// 배열을 받는 레퍼런스 arr
Array(T (&arr)[N]) {
for (int i = 0; i < N; i++) {
data[i] = arr[i];
}
}
T* get_array() { return data; }
unsigned int size() { return N; }
void print_all() {
for (int i = 0; i < N; i++) {
std::cout << data[i] << ", ";
}
std::cout << std::endl;
}
};
int main() {
int arr[3] = {1, 2, 3};
// 배열 wrapper 클래스
Array<int, 3> arr_w(arr);
arr_w.print_all();
}
과연 아래 두 클래스는 같은 클래스일까? 다른 클래스일까?

템플릿 메타 프로그래밍 (Template Meta Programming - TMP)

TMP 를 왜 쓰는가?
조금 더 복잡한 예제를 가지고 TMP 를 어떻게 사용할 지에 대해서 생각해보자.


결론적으로 Ratio 클래스의 개체를 생성한 것 같지만, 실제로 생성된 개체는 하나도 없고 단순히 타입들을 컴파일러가 만들어 낸 것이다.

Last updated