5
celu obliczenia silni mogę użyć:Recursive szablon metaprogramowanie
template<int N> struct factorial { enum { value = N * factorial<N-1>::value }; };
template<> struct factorial<1> { enum { value = 1 }; }; //base Case
i wtedy można go używać jak po
x=factorial<8>::value;
Tak, jest to możliwe, aby uzyskać podobny szablon rekurencyjnej dla
unsigned Log2(unsigned n, unsigned p = 0) {
return (n <= 1) ? p : Log2(n/2, p + 1);
}
Mogę myśleć o tym:
template<int N,unsigned int P=0> struct Log2
{ enum { value = Log2<N/2,P+1>::value }; };
Ale nie wiem, jak ustawić skrzynkę podstawową.
template<> struct Log2<0,???> { enum { value = ???? }; };
Jakieś pomysły?
dziękuję, myślę, że to powinno być "wartość = p-1"? – P0W
@ P0W: Cóż, używam twojej implementacji, która zwraca 'p' gdy' n <= 1'. – kennytm
tak, dzięki – P0W