初始化ctor中的随机常数值

Initialize random constant values in ctor

本文关键字:随机 常数值 ctor 初始化      更新时间:2023-10-16

在我的类中,似乎有必要初始化结构中的一些常量随机值。

为了实现这一点,有明确的限制:

std::random_device rd;
std::mt19937 eng(rd());
std::uniform_int_distribution<> lim1(3, 6);
std::uniform_int_distribution<> lim2(7, 20);
std::uniform_int_distribution<> lim3(1000, 100000);

以及以下结构:

typedef struct {
    unsigned        c1, c2, c3;
    const unsigned  limc1 = lim1(eng), 
                    limc2 = lim2(eng), 
                    limc3 = lim3(eng);
} CTR;

所以,当我尝试用这些值进行初始化时

class Foo {
    private:
        CTR ctr;
    public:
    voud initializeCTR(CTR &ctr);
};

问题是字段ctr对于initializeCTR() 是不可见的

Foo foo;
foo.initializeCTR(ctr); <- ctr undefined here

我应该如何编写ctor或其他代码来为所有类实例实现不同的随机值?

在此代码中:

Foo foo;
foo.initializeCTR(ctr); <- ctr undefined here

您尝试访问的变量ctr不是类Foo中定义的私有字段ctr。解决方案应该是:

void Foo::initializeCTR() {
  ctr.do_something();
  // ...
}

更好的解决方案是在构造函数中使用它:

Foo::Foo() {
  ctr.do_something();
  // ...
}