5
Ben kullanabilirsiniz: YaniRecursive şablon metaprogramming
x=factorial<8>::value;
aşağıdaki gibi kullanabilirsiniz ardından
template<int N> struct factorial { enum { value = N * factorial<N-1>::value }; };
template<> struct factorial<1> { enum { value = 1 }; }; //base Case
ve bu
için benzer özyinelemeli şablon almak mümkündürunsigned Log2(unsigned n, unsigned p = 0) {
return (n <= 1) ? p : Log2(n/2, p + 1);
}
Bunu düşünebilirim:
template<int N,unsigned int P=0> struct Log2
{ enum { value = Log2<N/2,P+1>::value }; };
Ancak temel durumun nasıl ayarlanacağını bilmiyorum.
template<> struct Log2<0,???> { enum { value = ???? }; };
Herhangi bir fikir?
Teşekkürler, bunun "value = p-1" olması gerektiğini düşünüyorum? – P0W
@ P0W: Ben sadece n '= 1' iken 'p' döndüren uygulamanızı kullanıyorum. – kennytm
Evet, gerçekten hızlı yanıt için 'constexpr' öneri – P0W