5
Für faktorielle Berechnung kann ich verwenden:rekursive Metaprogrammierung
template<int N> struct factorial { enum { value = N * factorial<N-1>::value }; };
template<> struct factorial<1> { enum { value = 1 }; }; //base Case
und dann wie
x=factorial<8>::value;
So folgende verwenden können, ist es möglich, ähnliche rekursive Vorlage für
zu erhaltenunsigned Log2(unsigned n, unsigned p = 0) {
return (n <= 1) ? p : Log2(n/2, p + 1);
}
Ich kann mir das vorstellen:
template<int N,unsigned int P=0> struct Log2
{ enum { value = Log2<N/2,P+1>::value }; };
Aber ich weiß nicht, wie man einen Basisfall einstellt.
template<> struct Log2<0,???> { enum { value = ???? }; };
Irgendwelche Ideen?
danke, ich denke, es sollte 'value = p-1' sein? – P0W
@ P0W: Nun, ich benutze nur Ihre Implementierung, die 'p' zurückgibt, wenn' n <= 1'. – kennytm
yeah hab es dank – P0W