Template Metaprogramming là kỹ thuật thực hiện tính toán tại thời điểm biên dịch (compile-time) bằng cách dùng template. Trình biên dịch triển khai đệ quy template để tính giá trị trước khi chương trình chạy.
Ví dụ: Tính 4^n tại compile-time
#include <iostream>
using namespace std;
template<int n> struct power {
enum { value = 4 * power<n-1>::value };
};
template<> struct power<0> { // đặc biệt hóa cơ sở
enum { value = 1 };
};
int main() {
cout << "4^7 = " << power<7>::value << endl; // 16384
return 0;
}
Kết quả
4^7 = 16384
Khi biên dịch thấy power<7>::value, nó khởi tạo power<7>, yêu cầu power<6>, ... đến power<0>. Đệ quy template kết thúc tại đặc biệt hóa power<0>. Toàn bộ tính toán diễn ra lúc biên dịch, không tốn chi phí runtime.