C/C++ ( BetterC ) でやっています。
Cの標準関数 rand関数 はあまりよくないようなので、
Boostの Randamというものを使って乱数を発行したいと思っています。
ですが、そのままだと使いづらいので、自分が使いやすいようなクラスにしたいと思っています。
Boostのは、
Randomジェネレータを生成してrandで取得
らしいのですが、
これをクラスにする方法がわかりません。
私の考えでは、
通常のクラス ( テンプレートなし ) で、
コンストラクタで ジェネレータを生成し、
get系で取得する
という感じです。
実装例は
C++
1class CRand 2{ 3 public: 4 // コンストラクタ 5 CRand( double min, double max, int seed = time(NULL) ){ 6 // ここでジェネレータ ( どういう乱数か ) を生成 7 } 8 9 // デストラクタ 10 ~CRand(){} 11 12 // get系 13 double Get(){ 14 return rand(); 15 } 16 private: 17 // ここに生成したジェネレータ等のオブジェクトがある 18};
で、
C++
1int main(){ 2 3 // 0 から 100 までで、time(NULL)を seed として乱数を発行するオブジェクト 4 CRand* Random = new CRand( 0, 100 ); 5 6 for( int i = 0; i < 10; i++ ){ 7 cout << Random->Get() << endl; 8 } 9 10 delete Random; 11return 0; 12}
のように、
使うときは
インスタンス化のときに (最小値,最大値,シード値) を渡して
あとはひたすらfor文かwhile文で回しながら 取得...
みたいにしたいのです。
ですが、これを記述 ( もちろんBoost付属のサンプルソースを見て記述 ) して実行したところ、
乱数がうまく発行されないようです。
(発行されていても、常に同じ値。乱数とはいえない。)
同じブロック内 ( main関数内、自作関数内 等 ) ではちゃんと発行されます。
関数でもいいですが、
vectorまたはlistで取得するしかない ( または一個だけ ) ので、
クラスにして...
という感じがいいです。
C++のテンプレート ( テンプレートだけじゃないですが... ) ってかなりわかりづらいので、
どういじればいいのか...
[環境等]
コンパイラ : g++ ( MinGW )
言語 : C/C++ ( betterC )
知りたいこと: Boost の Randomをクラス化する方法 ( ただし、templateを使わない方法 )
宜しくお願い致します。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/08/15 06:48