有几个好的答案like this提供了一个简洁的随机应用程序,但是我很难从那个应用程序扩展到较大的应用程序的一小部分。
这就是我正在做的事情:
#include <random>
class RandomFP16
{
public:
static RandomFP16* GetInstance();
int GetRandom();
private:
static RandomFP16* singleton;
RandomFP16();
std::mt19937 mt;
std::uniform_int_distribution<int> dist;
};
RandomFP16* RandomFP16::GetInstance()
{
if(singleton == 0)
{
singleton = new RandomFP16();
}
return singleton;
}
RandomFP16::RandomFP16()
{
std::random_device rd;
//next two lines have errors
mt(rd());
dist(0x00000000, 0x00010000); //fixed-point 16.16
}
int RandomFP16::GetRandom()
{
return dist(mt);
}
所以基本上,我想要一个可以随时随地使用的共享随机生成器......随机。 :-)来自嵌入式C和Windows C#,我看到这里使用了一些奇怪的语法,所以我不确定如何构造东西来摆脱这些错误:
error: no match for call to '(std::mt19937 {aka std::mersenne_twister_engine<unsigned int, 32u, 624u, 397u, 31u, 2567483615u, 11u, 4294967295u, 7u, 2636928640u, 15u, 4022730752u, 18u, 1812433253u>}) (std::random_device::result_type)'
mt(rd());
^
error: no match for call to '(std::uniform_int_distribution<int>) (int, int)'
dist(0x00000000, 0x00010000);
^
答案 0 :(得分:0)
好的,我明白了。无论如何要张贴以保存某人的工作。
#include <random>
class RandomFP16
{
public:
static RandomFP16* GetInstance();
int GetRandom();
private:
static RandomFP16* singleton;
RandomFP16(std::random_device::result_type seed);
std::mt19937 mt;
std::uniform_int_distribution<int> dist;
};
RandomFP16* RandomFP16::singleton = 0;
RandomFP16* RandomFP16::GetInstance()
{
if(singleton == 0)
{
std::random_device rd;
singleton = new RandomFP16(rd());
}
return singleton;
}
RandomFP16::RandomFP16(std::random_device::result_type seed)
: mt(seed), dist(0x00000000, 0x00010000) //fixed-point 16.16
{
}
int RandomFP16::GetRandom()
{
return dist(mt);
}
结果是班级定义是正确的;问题都在实施中: