0

我目前正在寻找新的c++11 random图书馆。为简化起见,我创建了以下类

class my_rand {
    private:
        std::mt19937_64 eng;
    public:
        my_rand() {
            std::array<int, std::mt19937::state_size> seed_data;
            std::random_device rd;
            std::generate_n(seed_data.data(), seed_data.size(), std::ref(rd));
            std::seed_seq seq(std::begin(seed_data), std::end(seed_data));
            this->eng.seed(seq);
        };
        unsigned long long operator() () {
            return this->eng();
        };
};

这样我就可以只做my_rand rand;一次然后反复调用rand()以生成随机数。

但是,现在我想使用std::uniform_int_distribution绑定到我得到的数字。在创建对象时指定边界是显而易见的,因此调用保持不变。问题是,如果我添加私有成员(类似std::uniform_int_distribution<long long> uid;),那么稍后在构造函数中我将无法设置边界,因为uid它已经被初始化。我找不到std::uniform_int_distribution在创建后允许设置限制的方法。

我很可能在这里遗漏了一些要点,因此在此先感谢您的帮助。

4

1 回答 1

1

使用初始化列表来构造成员变量或基类。(有关更多信息,请参见此处

my_rand(...arguments...) : uid(...arguments...) //<-- Initializer list
{
    //...stuff...
} //<-- No semicolon after function definition.

如果这不适合您的需求,您可以随时这样做:

myVar = int(27);

例如:

//Initial construction:
std::uniform_int_distribution<> testA(1, 6);

//Re-assignment by copy-construction (move-construction actually)
//and a temporary object.
testA = std::uniform_int_distribution<>(5, 10);
于 2013-07-08T06:04:13.120 回答