【发布时间】:2012-06-15 11:21:43
【问题描述】:
下面的程序在不使用任何循环、运行时递归或库函数[pow]的情况下计算 2 的 n 次幂。
它使用 TEMPLATE METAPROGRAMMING 技术。
#include <iostream>
using namespace std;
template<int n> struct funStruct
{
enum { val = 2*funStruct<n-1>::val };
};
template<> struct funStruct<0>
{
enum { val = 1 };
};
int main()
{
cout << funStruct<8>::val << endl;
return 0;
}
我在徘徊,我可以用函数代替结构吗?
【问题讨论】:
-
这怎么不使用递归呢?它发生在编译时——但这很明显,因为参数是作为模板参数传递的,所以计算也发生在编译时。
-
这个特殊的元编程示例的重点是 2^n 是在编译时(递归地)计算的,而不是在运行时。