5
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 = ???? }; };
私はそれが 'value = p-1'であるべきだと思いますか? – P0W
@ P0W:ちょうど 'n <= 1'のときに' p'を返す実装を使っています。 – kennytm
ええ、ありがとう – P0W