我正在尝试实现一个类,将其用作随机库的包装器,以便在代码的其他地方(我认为)可以更直观地使用其对象和函数。
在标头中,我有类似以下内容:
class RandomDevice{
private:
unsigned long rand_seed;
default_random_engine engine;
public:
RandomDevice(unsigned long n);
int randInt(int min, int max);};
Run Code Online (Sandbox Code Playgroud)
然后在.cpp文件中,我实现了这两个函数(构造函数和randInt),如下所示:
RandomDevice::RandomDevice(unsigned long n){
rand_seed = n;
default_random_engine engine;
engine.seed(n);
}
int RandomDevice::randInt(int min, int max){
uniform_int_distribution<int> distribution(min, max);
return distribution(engine);
}
Run Code Online (Sandbox Code Playgroud)
最后,在main.cpp中,我将像下面这样测试这些功能:
int main(){
unsigned long seed = 1;
RandomDevice my_rand(seed);
cout << "random integer: " << my_rand.randInt(0, 10) << endl;
}
Run Code Online (Sandbox Code Playgroud)
问题是,无论我在main.cpp中将种子设置为什么,我总是为随机数获得相同的值(不仅是randInt,我还有其他分布)。我也尝试将种子设置为time(NULL),但发生相同的问题。
我真的很head头。谢谢!