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