5
Per calcolare fattoriale posso usare:ricorsivo template metaprogrammazione
template<int N> struct factorial { enum { value = N * factorial<N-1>::value }; };
template<> struct factorial<1> { enum { value = 1 }; }; //base Case
e quindi può essere utilizzato come seguire
x=factorial<8>::value;
Quindi, è possibile ottenere simili modello ricorsivo per
unsigned Log2(unsigned n, unsigned p = 0) {
return (n <= 1) ? p : Log2(n/2, p + 1);
}
Posso pensare a questo:
template<int N,unsigned int P=0> struct Log2
{ enum { value = Log2<N/2,P+1>::value }; };
Ma non so come impostare un caso base.
template<> struct Log2<0,???> { enum { value = ???? }; };
Qualche idea?
grazie, penso che dovrebbe essere 'value = p-1'? – P0W
@ P0W: Beh, sto solo usando la tua implementazione che restituisce 'p' quando' n <= 1'. – kennytm
Sì, grazie – P0W