템플릿을 사용하여 컴파일 시간에 계산을 수행하는 프로그램을 작성할 때 이를 템플릿 메타프로그래밍이라고 합니다.
예시 코드
#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를 사용하고 컴파일 시간 재귀가 종료됩니다. 이것을 템플릿 메타프로그래밍이라고 합니다.