Khi chúng tôi viết các chương trình để thực hiện tính toán tại thời điểm biên dịch bằng cách sử dụng một mẫu, được gọi là Lập trình siêu mẫu.
Mã mẫu
#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; }
Đầu ra
power is:16384
Trong ví dụ trên, khi trình biên dịch thấy giá trị power <7> ::, nó sẽ cố gắng tạo một thể hiện của power với tham số là 7, hóa ra power <6> cũng phải được tạo vì giá trị hằng số liệt kê phải được đánh giá tại thời điểm biên dịch . Đối với power <6>, trình biên dịch cần power <5>, v.v. Cuối cùng, trình biên dịch sử dụng giá trị funStruct <1> ::và thời gian biên dịch kết thúc đệ quy. Đây được gọi là lập trình siêu mẫu.