ブースト乱数ジェネレーターを使用したいオブジェクトがあるという特定の状況があり、それは私が答えることができないより大きな質問につながりました。これが私が作成しようとしているもののサンプルコードです。
まず、私のヘッダー:
Class MyObject {
protected:
double some variable;
boost::random::mt19937 rgenerator;
boost::uniform_real<double> dist_0_1;
boost::variate_generator< boost::mt19937&, boost::uniform_real<double> > rand01
}
今私がしたいのは:
Class MyObject {
protected:
double some variable;
boost::random::mt19937 rgenerator(std::time(0)); //initialize to a "random" seed
boost::uniform_real<double> dist_0_1(0,1); //set the distribution to 0-1
boost::variate_generator< boost::mt19937&, boost::uniform_real<double> > rand01(rgenerator, dist_0_1);//tell it to use the above two objects
}
ただし、ヘッダーにあるため、これは機能しません。MyObjectのコンストラクターを使用して、さまざまなサブオブジェクト(ディストリビューション、ジェネレーター)のコンストラクターを呼び出すことができると思いましたが、方法がわかりません。MyObjectのコンストラクターが呼び出されるまでに、サブオブジェクトのデフォルトコンストラクターはすでに呼び出されていますが、これらのプロパティをリセットするためのメンバーメソッドがあることはわかりません...それ以外に、それは私が混乱しているポイントではありません。 m紛らわしい問題ですが、私が知る限り、私の問題は次のような幼稚な例になります。
Class Tree {
Tree();
Tree(int);
protected:
fruit apples(int);
}
Tree::Tree() {
apples(0); //won't work because we can't call the constructor again?
}
Tree::Tree(int fruit_num) {
apples(fruit_num); //won't work because we can't call the constructor again?
}
Class Fruit {
public:
Fruit();
Fruit(int);
protected:
int number_of_fruit;
}
Fruit::Fruit() {
number_of_fruit = 0;
}
Fruit::Fruit(int number) {
number_of_fruit = number;
}
これは他のすべての人にとって第二の性質であると確信していますが、オブジェクトのメンバーオブジェクトをデフォルト以外のコンストラクター値に初期化するためのベストプラクティスについて説明している記事は見つかりません。