C++ 中的模板元编程

当我们使用模板编写程序以在编译时进行计算时,这称为模板元编程。

示例代码

#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 并且编译时递归终止。这称为模板元编程。