템플릿을 사용하면 객체를 생성하지 않더라도, 타입에 어떠한 값을 부여할 수 있고, 그 타입들을 가지고 연산할 수 있다. 또한 타입은 반드시 커마일 타임에 확정되어야하니 컴파일 타임에 모든 연산이 끝나게 된다. 이렇게 타입을 가지고 컴파일 타임에 생성되는 코드로 프로그래밍을 하는 것을 메타 프로그래밍이라고 한다. C++의 경우 템플릿을 가지고 이러한 작업을 하기 때문에 템플릿 메타 프로그래밍(TMP)이라 한다.
#include <iostream>
template <int N>
struct Factorial {
static const int result = N * Factorial<N - 1>::result;
};
template <>
struct Factorial<1> {
static const int result = 1;
};
int main() {
std::cout << "6! = 1*2*3*4*5*6 = " << Factorial<6>::result << std::endl;
}
컴파일 타임에 모든 연산이 끝나기 때문에 프로그램 실행 속도를 향상시킬 수 있음(대신 컴파일 시간은 늘어남)
하지만 TMP는 복잡하고 버그를 찾는게 힘드니 속도가 매우 중요한 기능에 사용하자