Boost 随机数生成单例
#ifndef _RANDOMHELPER_H
#define _RANDOMHELPER_H
#include <boost/random.hpp>
#include <ctime>
#include <boost/pool/detail/singleton.hpp>
using namespace boost;
using boost::details::pool::singleton_default;
template<typename T> class rng_wrapper//模板类型是随机数发生器
{
private:
T rng;//随机数发生器成员变量
public:
rng_wrapper():rng((typename T::result_type)time(0))
{
}
typename T::result_type operator()(const int &min,const int &max)//重载调用操作符
{
uniform_int<> ui(min,max);
return ui(rng);
}
T GetEngine()
{
return rng;
}
};
typedef singleton_default< rng_wrapper<mt19937> > rng_t;
class RandomHelper
{
public:
RandomHelper(){}
static int Random(const int &min,const int &max)
{
rng_t::object_type &rng = rng_t::instance();
return rng(min,max);
}
};
#endif
调用示例如下:
int main(void)
{
for(int i = 0; i < 100 ; i++)
{
cout << RandomHelper::Random(1,100)<< endl;
}
return 0;
}
欢迎大家多提意见,这里只是实现了整数的随机,其他各类的随机数,只需要修改对应的分布器即可。
关于分布器,可以参考:
浙公网安备 33010602011771号