本内容接上题,上题的写法是写出一个求出logk(int n)的整数部分的template,结果如下: #include <iostream> using namespace std; template <int n> class static_log2N { public: enum {value = static_log2N<n/2>::value+1 }; } ; template <> class static_log2N<1> { public: enum{value = 0}; }; int main() { cout<<static_log2N<28>::value<<endl; cin.get(); }
进一步扩展,可以写出一个求出底为k,求log(int k)(int N)的整数部分的程序来,如下: #include <iostream> using namespace std; template <int base,int n> class static_logxN { public: enum {value = static_logxN<base,n/base>::value+1 }; } ; template <int base> class static_logxN<base,1> { public: enum{value = 0}; }; int main() { cout<<static_logxN<3,28>::value<<endl; cin.get(); } 昨天去书店找关于此类编程的资料,在c++ templates一书中找到称其为metaprogamming, 呵呵,孤陋寡闻了, 这本书的中文版太贵了,而且网上评论说译的不是太好,于是上午就买了本影印版,看上去是有点费劲,不过可省了近20块大洋呢^_^ 趁这几天有时间,抓紧看一下:) |