0

現在、ブーストをランダムに使用していますが、他のライブラリまたは自分のコード(一部)に切り替える可能性があるため、クラス内でラップして、乱数が必要になったときに(または他の何か)私はそれ自体をブーストする代わりにこのクラスからそれを取得します。問題は、どうすればよいのかということです。このクラスをシングルトンまたは静的クラスなどにする必要がありますか?
(クラスを考えたのは、シードを1回だけ行う必要があるが、さまざまな場所から機能を取得し、main.cppにシードしたくないためです)

PSクラスなしでそれを行う方法があれば、それも同様に行います。

4

2 に答える 2

1

定期的に授業をすることをお勧めします。このようにして、ユーザーはオブジェクトを作成し、いくつかのパラメーターを設定してから、次のユースケースの例のように値を照会できます。

{
    YourRandomGenerator random;
    random.SetRange(0, 1000);
    for (int i = 0; i < 1000; ++i)
        CallUserFunction(random.Next());
}

このアプローチにより、分布ごとに異なるランダムジェネレーターを作成できるようになります。さまざまなクラス(YourUniformRandomGenerator、YourGaussDistributedRandomGenerator、...)またはパラメーター化メソッド(SetUniform、SetGauss、...)のいずれかを使用します。一度だけシードしたい場合(なぜそれをしたいのですか?)、それらすべてのジェネレータークラスは同じ静的ブーストランダムジェネレーターにアクセスできます。

于 2012-10-02T10:22:24.260 に答える
0

このクラスをシングルトンまたは静的クラスなどにする必要がありますか?

それを行うための2つの標準的な方法があります。

  • ファクトリ関数を持つ抽象クラス。
  • Pimplイディオム。

どちらの方法でも、ヘッダーファイルでの実装の公開を回避できます。

クラスなしでそれを行う方法があれば、それも同様に行います。

呼び出しの合間に維持しなければならない状態がない場合は、非インライン関数を使用して回避できます。

于 2012-10-02T09:01:05.067 に答える