템플릿을 사용하여 컴파일 시간에 계산을 수행하는 프로그램을 작성할 때 이를 템플릿 메타프로그래밍이라고 합니다.
예시 코드
#include <iostream>
using namespace std;
template<int n>struct power {
enum { value = 4*power<n-1>::value };
};
template<>struct power<0> {
enum { value = 1 };
};
int main() {
cout <<”power is:”<< power<7>::value << endl;
return 0;
} 출력
power is:16384
위의 예에서 컴파일러는 power<7>::value를 볼 때 매개변수가 7인 power의 인스턴스를 생성하려고 시도하는데, power<6>도 컴파일 타임에 평가되어야 하는 열거형 상수 값으로 생성되어야 함을 알 수 있습니다. . power<6>의 경우 컴파일러는 power<5> 등이 필요합니다. 마지막으로 컴파일러는 funStruct<1>::value를 사용하고 컴파일 시간 재귀가 종료됩니다. 이것을 템플릿 메타프로그래밍이라고 합니다.