封装c++随机数生成器

Encapsulate c++ Random Number Generator

本文关键字:随机数生成器 c++ 封装      更新时间:2023-10-16

我正在构建一些需要我

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++有一个共同的基础类型

标准第§26.5.1.3节描述了对随机数生成器的要求。

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

g() T返回一个闭合区间内的值[g::min(), g::max()]。平摊常数

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

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

#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});
}