メルセンヌ乱数ジェネレーターをメンバー変数として保持し、同じクラスで使用する方法を知りたい。メンバー変数としてメルセンヌツイスターシード
私はこのクラスを以下のように書いていますが、完全に動作しますが、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()
};
}
なぜそれをしたいですか?現在のコードの問題は何ですか?そして、初期化をコンストラクタに移動する際の問題は何ですか?何かしようとしましたが、それは仕事をしませんでしたか? – user463035818
メンバーの初期リストをお探しですか? 'Test():rnd(seed){... blah ...}'。 – HolyBlackCat
2つの方法:最初に、コンストラクタの初期化子リストを使用して変数を初期化します。これは基本的にあなたが今やっていることと同じです。 2番目の方法は、コンストラクタ本体の中のコピー代入演算子を使用して、一時オブジェクトから 'm_random'オブジェクトにコピーすることです。 –