模板元编程的"hello,world"可以被认为是阶乘代码:
templatestruct factorial { enum { value = n * factorial ::value }; }; template <> struct factorial<0> { enum { value = 1 }; };
所以我们可以通过这样做得到阶乘
cout << factorial<4>::value << endl; //It will print 24
但如果我这样做:
int N = 4; cout << factorial::value << endl; //COMPILE ERROR
有没有办法在C++中为模板化函数提供动态值?
不,你做不到.模板元编程的重点是在编译时进行一些计算.您的factorial示例的整个递归扩展链由编译器完成,因此它必须知道值n
才能完成计算.
如果您不知道n
运行时的值,则应用"常规"编程样式,因此调用factorial
变得不必要.