본문 바로가기
프로그래밍 언어/C++

C++ 프로그래밍 방법론 / 템플릿 메타 프로그래밍(TMP)

by Nighthom 2023. 2. 13.

C++에서는 템플릿에 어떠한 타입이 있는 값을 사용할 수 있고, 이를 통해서 컴파일 타임에 구성되는 어떠한 로직을 구성할 수 있다. 이런 방식의 프로그래밍을 템플릿 메타 프로그래밍이라고 한다.

template<int N>
struct Factorial {
  static const int result = N * Factorial<N - 1>::result;
};

template<>
struct Factorial<1> {
  static const int result = 1;
};

재귀 함수의 예시로 가장 많이 사용되는 팩토리얼을 활용해서 예시를 구성하였다. 

 

템플릿 특수화를 활용해서 1이 되었을 경우 result값으로 1을 정의하고, Factorial<N>을 받았을 경우 지속적으로 result에 N * Factorial<N-1>::result 값을 대입하도록 정의하였다. 

 

만약 Factorial<3>::result를 입력할 경우

Factorial<3>::result = 3 * Factorial<2>::result;

Factorial<2>::result = 2 * Factorial<1>::result;

Factorial<1>::result = 1;

3*2*1 = 6

이러한 연산이 컴파일 타임에 수행되어서 지정되게 된다. 

댓글