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

调用示例如下:

 

#include <iostream>

 

 

#include "RandomHelper.h"
using namespace std;

int main(void)
{    
    for(int i = 0; i < 100 ; i++)
    {        
        cout << RandomHelper::Random(1,100)<< endl;
    }   
    return 0;
}
欢迎大家多提意见,这里只是实现了整数的随机,其他各类的随机数,只需要修改对应的分布器即可。

关于分布器,可以参考:

http://laokaddk.blog.51cto.com/368606/323858

 

 

 

 

posted on 2011-01-06 09:48  AlexRowe  阅读(1730)  评论(0)    收藏  举报

导航