質問: 0; i < 10; i++ ){ cout << Random->Get() << endl; } delete Random; return 0; } ``` のように、 使うときは インスタンス化のときに (最小値,最大値,シード値) を渡して あとはひたすらfor文かwhile文で回しながら 取得... みたいにしたいのです。 ですが、これを記述 ( もちろんBoost付属のサンプルソースを見て記述 ) して実行したところ、 乱数がうまく発行されないようです。 (発行されていても、常に同じ値。乱数とはいえない。) 同じブロック内 ( main関数内、自作関数内 等 ) ではちゃんと発行されます。 関数でもいいですが、 vectorまたはlistで取得するしかない ( または一個だけ ) ので、 クラスにして... という感じがいいです。 C++のテンプレート ( テンプレートだけじゃないですが... ) ってかなりわかりづらいので、 どういじればいいのか... [環境等] コンパイラ : g++ ( MinGW ) 言語 : C/C++ ( betterC ) 知りたいこと: Boost の Randomをクラス化する方法 ( ただし、templateを使わない方法 ) 宜しくお願い致します。
回答: boost.random じゃなく、標準C++ 使って: ``` #include #include class CRand { public: // コンストラクタ CRand( double min, double max, int seed = time(NULL) ) : generator_(seed), distribution_(min, max) {} ~CRand(){} // get系 double Get() { return distribution_(generator_); } private: std::mt19937 generator_; std::uniform_real_distribution distribution_; }; #include int main(){ // 0 から 100 までで、time(NULL)を seed として乱数を発行するオブジェクト CRand* Random = new CRand( 0, 100 ); for( int i = 0; i < 10; i++ ){ std::cout << Random->Get() << std::endl; } delete Random; } ```