簡體   English   中英

隨機數類內初始化

[英]Random Number In-Class Initialisation

我正在創建一個類,我希望每次創建對象時,其中一個私有成員都會使用隨機數進行初始化。 以下代碼沒有問題:

private:
    unsigned random = rand() % 10;

但是,我想使用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);

這段代碼不會編譯,因為我試圖在類中定義一些靜態成員。 但是,我不確定在哪里定義它們。 我可以創建一個初始化所有內容的成員函數,但是我必須在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);

靜態數據成員的定義應放在.cpp文件中,否則您可能會違反一個定義規則。

實例

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM