2
我有一个包含RNG类:在C++ RNG的正确副本
class Sampler{
private:
std::random_device rd_;
std::mt19937 gen_;
public:
Sampler();
double sample();
};
类初始化如下:
Sampler::Sampler() :
gen_(rd_())
{}
我的问题是,我想使用这个类(成员函数sample()
)在另一个类中,但我不能复制类,因为std::random_device
不能被复制(复制构造函数被删除,否则会产生相同的随机数)。
class Foo{
private:
Sampler s_;
public:
Foo(Sampler);
};
然后:
Foo::Foo(Sampler s) :
s_(s) // does not work
{}
虽然这使得总感觉我不知道一个怎么会为了使其工作实现这一点。我已经读过一个机会,就是构建一个合适的拷贝构造函数,这样每次拷贝时都会有一个新种子播种,但我不知道如何去做。
您需要''Foo'中产生的另一个随机数,它在'Sampler'实例中?如果不是 - 为什么不存储引用/指针(智能指针)? – ForEveR
为什么'random_device'甚至是成员?你在ctor执行时只需要它,那么为什么你要保持它活着? – MSalters
你是对的,所以你的意思是我也可以写:'std :: mt19937 gen_(std :: random_device())'? – beginneR