如何在 C++11 中使用随机生成器作为 class 成员

How to use a random generator as a class member in C++11

我正在尝试将 std::mt19937 生成器用作 class 成员,但没有成功,但我总是得到相同的结果。这是我正在尝试的示例。

class Level 
{
public:
    Level();
private:
   int generateTokenType();
   std::mt19937 m_mt;
   std::random_device m_randomdevice;
};

Level::Level(): m_mt(m_randomdevice())
{
}

int Level::generateTokenType()
{
    std::uniform_int_distribution<int> dist(0, 10);
    return dist(m_mt);
}

我想要的是维护创建的生成器并在程序执行期间询问数字。

-- 编辑 -- 根据 Cornstalks 的回答,我这样做了:

class Level
{
public:
   Level();
private:
   int generateTokenType();
   std::mt19937 m_mt;
};
Level::Level(): m_mt((std::random_device())())
{
    for(auto i = 0; i < 10; i++)
        std::cout<<generateTokenType()<<" ";
    std::cout<<std::endl;
}

int Level::generateTokenType()
{
    std::uniform_int_distribution<int> dist(0, 10);
    return dist(m_mt);
}

但是在每次执行时我得到相同的数字...

移动 std::random_device m_randomdevice; 之前 std::mt19937 m_mt;.

在 C++ 中,成员 constructed/initialized 按照它们在 class 中声明的顺序排列。你的构造函数正在调用 m_randomdevice() before m_randomdevice 甚至被构造。

或者,删除 m_randomdevice 成员。你可以做 m_mt((std::random_device())()) 初始化 m_mt.