封装c ++随机数生成器

时间:2014-06-19 15:55:26

标签: c++ random encapsulation

我正在构建一些需要我

的东西
template<D>
class DistributionAdapter {
public:
    /**
     * @return number generated by the distribution function.
     */
    virtual D operator()(RANDOM_NUMBER_GENERATOR& rng) = 0;
};

RANDOM_NUMBER_GENERATOR应该表示c ++中的随机数生成器类,std :: random_device或伪随机数生成器。有人能告诉我该如何处理这个问题,我不知道c ++中的随机数生成器是否有一个共同的基类型

2 个答案:

答案 0 :(得分:0)

你所要求的并不完全清楚,但这是一个相当容易使用的函数,在特定范围内返回均匀分布的随机整数。

#include <random>

// random number generator from Stroustrup: 
// http://www.stroustrup.com/C++11FAQ.html#std-random
int rand_int(int low, int high)
{
    static std::default_random_engine re {};
    using Dist = std::uniform_int_distribution<int>;
    static Dist uid {};
    return uid(re, Dist::param_type{low,high});
}

答案 1 :(得分:0)

标准的第26.5.1.3节描述了随机数发电机的要求。

特别是,生成器必须支持函数调用操作符:

  

g()T返回闭区间[G :: min(),G :: max()]中的值。   摊销常数

因此,尽管每个生成器都没有共享基类,但标准保证每个生成器中都存在operator():您可以在函数中调用rng()