2

タイトルに適切な用語を使用したかどうかはわかりませんが、私がやろうとしていることは次のとおりです。

誕生と壁の衝突にランダムな動作を必要とする軽量のパーティクル クラス (簡略化) があります。そのための施設を授業自体に残しておきたいと思います。私の理解では、静的メンバーは一度だけ作成され、クラスのすべてのインスタンス間で共有できます。

乱数ジェネレーター オブジェクトの場合、シードメソッドを 1 回呼び出したいのですが、ほとんどの例では単純な静的変数または関数が使用されているため、これを行う方法がわかりません。

Particle.h:

#include <random>

class Particle
{
    public:
        Particle();
    private:
        static std::default_random_engine pRNG;
        static std::uniform_real_distribution<> dist(0, 1);
};

パーティクル.cpp

#include "particle.h"
#include <ctime>

std::default_random_engine Particle::pRNG.seed(time(NULL)); // <- wrong, help!

Particle::Particle() {}

// methods, etc.

シードメソッドを Particle コンストラクターに入れると、生まれたすべてのパーティクルでそれが呼び出されると思います私が考えることができる唯一の簡単なハックは、bool メンバーを Particle クラスに追加することでした。これは、最初のシード呼び出しで false に設定されます。

4

3 に答える 3

0

これを行う簡単な方法: 「AutoInitRNG」という名前のクラスをdefault_random_engine作成し、そのコンストラクターにシードします。そして、そのクラスを Particle の static メンバー変数にします。このようなもの:

class AutoInitRNG
{
public:
    std::default_random_engine pRNG;

    AutoInitRNG()
    {
        pRNG.seed(time(NULL));
    }
};

class Particle
{
//...
private:
    static AutoInitRNG RNG;
};
于 2013-06-21T17:12:25.203 に答える