【发布时间】:2017-06-10 20:26:17
【问题描述】:
我想知道如何将梅森随机数生成器保留为成员变量并在同一个类中使用。
我编写了如下的类,它运行良好,但我不喜欢 std::mt19937 被初始化。我想知道有没有办法在Test的构造函数中初始化它?
#include <iostream>
#include <cmath>
#include <random>
#include <chrono>
#include <ctime>
class Test{
public:
Test()
{
}
void foo()
{
auto randomNum = std::uniform_int_distribution<>(0, threads.size())(rnd);
}
private:
std::mt19937 rnd
{
std::chrono::high_resolution_clock::now().time_since_epoch().count()
};
}
【问题讨论】:
-
你为什么要这样做?当前代码有什么问题?将初始化移动到构造函数有什么问题?你有没有尝试过,但没有成功?
-
您在寻找成员初始化列表吗?
Test() : rnd(seed) {...blah...}. -
两种方式:第一种是使用构造函数初始化列表来初始化变量。这基本上相当于你现在正在做的事情。第二种方法是使用构造函数体内的复制赋值操作符从一个临时对象复制到
m_random对象中。 -
@Nathan,这不是重复的
-
@HolyBlackCat 是的。但是你如何使用 std::mt19937 呢?
标签: c++ c++11 member-initialization