当我有一个程序需要随机数生成器时,我使用这个类,以便整个程序可以在同一个 rng 上运行。
#include <random>
#include <ctime>
using namespace std;
class Rizzian {
private:
static mt19937 mt;
public:
void initialize() {
mt.seed(unsigned(time(NULL)));
}
unsigned int r() {
return mt();
}
};
这要求以下行出现在代码的其他位置(在任何函数或类定义之外):
mt19937 Rizzian::mt = mt19937();
当 rng 初始化并且我有变量 Rizzian rng
时,我使用 rng.r()
获得随机数。
但是在 Rizzian 的定义之外增加一行让我觉得好像有更好的方法可以做到这一点,而且一般来说,一个静态变量的整个类感觉有点矫枉过正。所以这对我来说只是一种预感。这里有东西发臭。
这不是关于 rngs 或 mersenne twinters 或其他任何东西的具体问题。有没有更好的方法让静态变量整个程序都可以访问?
最佳答案
不需要专门为这个函数创建一个类。函数还可以包含静态成员。带有 static 关键字的行仅执行一次。
#include <random>
#include <ctime>
#include <iostream>
using namespace std;
unsigned int rnd()
{
static bool first_call = true;
static mt19937 mt = mt19937();
if (first_call)
{
mt.seed(unsigned(time(NULL)));
first_call = false;
}
return mt();
}
int main()
{
unsigned int r = rnd();
std::cout << r << std::endl;
for (int i=1; i<10; i++)
{
r = rnd();
std::cout << r << std::endl;
}
}
关于c++ - 对于 C++ 中的单个静态变量,是否有比类更好的选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26836321/