July 6th, 2007一个求logk(int n)整数部分的程序
本内容接上题,上题的写法是写出一个求出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块大洋呢^_^ 趁这几天有时间,抓紧看一下:)






