为了计算阶乘,我可以使用:
template<int N> struct factorial { enum { value = N * factorial<N-1>::value }; };
template<> struct factorial<1> { enum { value = 1 }; }; //base Case
然后可以像下面这样使用它
x=factorial<8>::value;
那么,是否有可能获得类似的递归模板
unsigned Log2(unsigned n, unsigned p = 0) {
return (n <= 1) ? p : Log2(n / 2, p + 1);
}
我能想到这个:
template<int N,unsigned int P=0> struct Log2
{ enum { value = Log2<N/2,P+1>::value }; };
但不知道如何设置基本情况。
template<> struct Log2<0,???> { enum { value = ???? }; };
有任何想法吗 ?