5
Để tính toán thừa tôi có thể sử dụng:Recursive mẫu Lập trình meta
template<int N> struct factorial { enum { value = N * factorial<N-1>::value }; };
template<> struct factorial<1> { enum { value = 1 }; }; //base Case
và sau đó có thể sử dụng nó như sau
x=factorial<8>::value;
Vì vậy, là nó có thể để có được mẫu đệ quy tương tự cho
unsigned Log2(unsigned n, unsigned p = 0) {
return (n <= 1) ? p : Log2(n/2, p + 1);
}
Tôi có thể nghĩ về điều này:
template<int N,unsigned int P=0> struct Log2
{ enum { value = Log2<N/2,P+1>::value }; };
Nhưng không biết cách đặt trường hợp cơ bản.
template<> struct Log2<0,???> { enum { value = ???? }; };
Bất kỳ ý tưởng nào?
cảm ơn, tôi nghĩ nó phải là 'giá trị = p-1'? – P0W
@ P0W: Tôi chỉ đang sử dụng triển khai của bạn, trả về 'p' khi' n <= 1'. – kennytm
yeah got it thanks – P0W