class A{
int a;
public:
A(int inA = 0);
int getA;
protected:
void setA(int inA);
};
A::A(int inA)
{
setA(inA)
}
void A::setA(int inA){
//need to set a as static random number
a = inA;
}
int A::getA()const
{
return a;
}
我怎么可能使用静态成员生成一个随机的?我在网上看过类似的内容:Random Number In-Class Initialisation但不确定如何使用它。
答案 0 :(得分:1)
最简单的方法可能是创建PRNG类的全局实例。
std::uniform_int_distribution<int> dist;
std::mt19937 rng((std::random_device()()));
struct foo
{
static int bar;
};
int foo::bar = dist(rng);
当然,将全局对象和初始化放在.cpp文件中(感谢@AnonMail!)。
使用旧(坏)随机数设施,您可以使用:
int foo::bar = (srand(time(0)), rand());
这也不是很好,因为你秘密播种srand
这有点奇怪,rand
很糟糕。
(可以说)有趣的方法是这样做:
int foo::bar = []() {std::uniform_int_distribution<int> dist; std::mt19937 mt((std::random_device()())); return dist(mt); }();
使用lambda创建变量并返回值,消除额外的对象并将其全部放在一行上。
我意识到我以为我以前没见过像这样使用过的lambda,所以我不确定它是否会起作用。我的编译器看起来很好,它按预期运行,所以我的假设是正确的。