我正在尝试实现以下类:
typedef std::mt19937 Engine;
class Interval
{
public:
double upperBoundary;
double lowerBoundary;
double generateUniformRandomNumber(Engine& engine);
};
我希望该类在多线程环境中工作。每个线程都有自己的Engine
对象实例,并且它将传递Engine
给任何具有随机行为的类的对象。
为了以 C++11 的方式统一生成随机数, 的实现generateUniformRandomNumber
必须是这样的:
uniform_real_distribution<double> distribution_; // private member of Interval
double Interval::generateUniformRandomNumber(Engine& engine)
{
return distribution_(engine);
}
问题是我不了解 C++11 发行版。我知道 C++11 随机数引擎可以是非常大的对象(几千字节),但是分布呢?起初我认为分布只是简单的函子,其中operator()
是一个pure const
函数,但似乎既不是pure
也不是const
。根据参考资料,每个分发实例都有一个reset()
成员函数。这意味着它有一个潜在的大内部状态,或者可能是一个缓存。
我的问题是:
发行版有内部状态吗?如果是,为什么?该标准是否说明了该州的规模?
像我一样进行实施是个好主意吗?有没有更好的办法?