Jam*_*ens 3 c++ random initialization c++11
我目前正在创建一个类,我希望每次创建对象时,其中一个私有成员都会使用随机数进行初始化.以下代码没有问题:
private:
unsigned random = rand() % 10;
Run Code Online (Sandbox Code Playgroud)
但是,我想使用C++ 11随机引擎和发行版来做到这一点.我希望能够按照以下代码执行某些操作,这些代码将无法编译,但会对我正在尝试执行的操作有一个大概的了解:
private:
unsigned random = distribution(mersenne_generator(seed));
static std::random_device seed_generator;
static unsigned seed = seed_generator(); //So that it's not a new seed each time.
static std::mt19937 mersenne_generator;
static std::uniform_int_distribution<unsigned> distribution(0, 10);
Run Code Online (Sandbox Code Playgroud)
这段代码不会编译,因为我试图在类中定义一些静态成员.但是,我不确定在哪里定义它们.我可以创建一个初始化所有内容的成员函数,但是我必须在main中运行它,我不想这样做.我想整理出类中的所有随机定义,这样当我在main中创建一个对象时,它将隐式创建随机数.有什么建议?
您需要在类定义之外定义静态数据成员.例如,这将工作:
struct foo
{
private:
unsigned random = distribution(mersenne_generator);
static std::random_device seed_generator;
static unsigned seed;
static std::mt19937 mersenne_generator;
static std::uniform_int_distribution<unsigned> distribution;
};
std::random_device foo::seed_generator;
unsigned foo::seed = seed_generator();
std::uniform_int_distribution<unsigned> foo::distribution(0, 10);
std::mt19937 foo::mersenne_generator(foo::seed);
Run Code Online (Sandbox Code Playgroud)
静态数据成员的定义应放在.cpp文件中,否则您可能会违反一个定义规则.
| 归档时间: |
|
| 查看次数: |
2950 次 |
| 最近记录: |