2012-03-28 13 views
2

私はC++で書かれた大きなシミュレーションを持っています。シミュレーションの主な作業単位は、ニューロンを表すクラスです。その計算を行うために、ニューロンクラスの各インスタンスは温度にアクセスする必要があります。各シミュレーションは、数万のインスタンスのニューロンクラスを使用し、温度は各ニューロンについて同じ値です。このため、通常のメンバーデータとして格納するのではなく、ニューロンクラスの各インスタンスが独自のコピーを格納するメモリを占有する必要はありません。理想的には、静的メンバー変数(または、最後の手段として、グローバル変数)として格納します。しかし、実行時にユーザの入力として決定される温度が必要です。 Neruonクラスにこの変数へのアクセスを静的メンバーデータのやり方で与える簡単な方法はありますか?C++で静的にクラスへのユーザー入力を取得

+0

なぜ、ユーザーが温度の値を入力したときに、ニューロンクラスの静的フィールドを更新できないのですか? –

+0

計算にパラメータとして 'temperature'を渡すことができますか? –

答えて

1

変数が静的であるという理由だけでなく、変数もconstである必要はありません。下記のコードを参照してください。

#include <cassert> 

struct X { 
    int member; 
    static int static_var; 
}; 

int X::static_var; 

int main() { 
    X x; 
    x.member = 1; 
    x.static_var = 2; 

    X y; 
    y.member = 3; 
    y.static_var = 4; 

    X::static_var = 5; 

    assert(x.static_var == y.static_var); 
    assert(&x.static_var == &y.static_var); 
} 
+0

これはまさに私が探していたものです、ありがとう!私のOOPチョップは進行中の作業であり、私が持っているリファレンスはこれをカバーしていませんでした。再度、感謝します! – cipher42

+1

@cipher、あなたの質問に答えた場合は、*回答*を受け入れることを忘れないでください。 –

1

staticメンバー関数を提供するだけで、実行時に呼び出して温度メンバーを設定することができます。
また、staticのメンバーをpublicにして直接設定することもできます。個人的な選択として、私はメンバーの機能を通してそれをやるほうが好きです。

class Neuron 
{ 
    public: 
     static void setTemperature(int i) 
     { 
      mTemp = i; 
     } 

    private: 
     static int mTemp; 
}; 

int Neuron::mTemp = 0; 


int main() 
{ 
    //Get Temperature at run-time 
    Neuron::setTemperature(10); 

    return 0; 
} 
+0

完璧、おかげで束! – cipher42

0

私はこれをグローバルの良い候補と見ます。あなたがシミュレーションに何かを追加して温度を使用するとどうなりますか?

誰でもいつでもグローバル変数を変更できるので、IMOはgetTemperature()のようなグローバルスコープ(標準)の関数を持つことが最善の解決策であると思います。それから、どんなオブジェクトでもいつでも呼び出すことができます。それを独自のCファイルに置き、静的にマークすると、選択したメカニズムでのみアクセスできます。

また、気に入らなければ、静的なGlobalsまたはSimulationInputsクラスを作成し、気温のようなもののゲッターを作成することもできます。

0

シングルトン、グローバル、静的データ、oh my!

C++のデータモデルでは、さまざまなメカニズムやハッキングによって、データにグローバルにアクセスし、そのデータのインスタンス数を制限できます。

私たちはできるはずなので、私たちはすべきではありません。それが解決策になる可能性のある設計をしているからといって、選択する必要はありません。

通常、自分のデータを管理するクラスがあります。オブジェクトが管理していないデータが必要な場合は、それをパラメータとして渡します。

したがって、パラメータとして温度を渡します。明示的は暗黙的より優れています。

あなたは、Neuronsを表すクラスがあると述べました。私はあなたがNeuronを意味すると仮定しますが、それらを一緒に保つNeuronsクラスを持つことも良いでしょう。それはすべてのNeuronの計算に適用される温度を持つことができます。

関連する問題