我正在为我的示例制作DrawNumber
函数public
。您可以提供一个接受上限的重载,然后将新的传递uniform_int_distribution::param_type
给uniform_int_distribution::operator()
param_type
可以使用与相应分布相同的参数来构造。
从 N3337,§26.5.1.6/9 [rand.req.dist]
对于每一个D
取参数对应分布的参数的构造函数,P
应有一个对应的构造函数,其要求相同,取参数的数量、类型和默认值都相同。而且,对于D
那个返回值对应的分布参数的每个成员函数,P
都应该有一个对应的成员函数,其名称、类型和语义都相同。
其中D
是随机数分布函数对象的类型,是由的关联P
命名的类型D
param_type
#include <iostream>
#include <random>
typedef unsigned int uint32;
class Random {
public:
Random() = default;
Random(std::mt19937::result_type seed) : eng(seed) {}
uint32 DrawNumber();
uint32 DrawNumber(uint32 ub);
private:
std::mt19937 eng{std::random_device{}()};
std::uniform_int_distribution<uint32> uniform_dist{0, UINT32_MAX};
};
uint32 Random::DrawNumber()
{
return uniform_dist(eng);
}
uint32 Random::DrawNumber(uint32 ub)
{
return uniform_dist(eng, decltype(uniform_dist)::param_type(0, ub));
}
int main()
{
Random r;
std::cout << r.DrawNumber() << std::endl;
std::cout << r.DrawNumber(42) << std::endl;
}