2012-04-24 18 views
-2

I持っているクラス設定:クラス間で変数を交換する正しい方法は何ですか?

class Config 
{ 
    public: 
     Config(); 
     ~Config(); 
     void Read(); 
     CData var; //CData - some config structure 
}; 

他のクラスからの値にアクセスするための正しい方法は何ですか?いくつかのオプションがあります:

  1. config.var.someはクラスの90%に必要とされ、それ他のクラス私のシステムでは
  2. バリアント

にグローバル

  • 転送を参照してください。

  • +1

    可能な複製[どの設定パターンを構成設定の問題に適用できますか?](http://stackoverflow.com/questions/1314730/which-design-patterns-can-be-applied-to-the-configuration -settings-problem) – Johnsyweb

    答えて

    3

    3)スタティックは基本的にグローバルにするのが好きです。

    ですが、この場合はvar自体をグローバルにすることが最善の方法です。

    1

    第3の方法:Configクラスにアクセサー関数を追加する。

    class Config 
    { 
        public: 
         Config(); 
         ~Config(); 
         void Read(); 
         int getNumberOfFooBars() const { return var.foo_bars; } 
    private: 
         CData var; //CData - some config structure 
    }; 
    
    +0

    彼は単一の 'Config'シングルトンのものを望んでいると思います。 –

    +0

    ああそう。それから私はそれをグローバルにする(あるいはそれを 'QApplication'のような別のグローバルなシングルトンインスタンスのメンバにするのと同じようなアプローチです)。 – jpalecek

    +0

    は分かりません。例えば、main()ではConfig.Read() - 設定ファイルを解析します。いくつかのクラスでどのように次のように私はあなたの提案の結果を得るのですか? – askovpen

    1

    私は一般的に、このようなオブジェクトを怠惰でグローバルにするのではなく、参照として渡します。オブジェクトを渡すと、どのクラスがコンストラクタ/メンバ初期化子リストを見てオブジェクトを使うのかが非常に明白です。逆に、それをグローバル(シングルトンなど)にすることは、あなたや他の人がどのクラスがオブジェクトを一目で必要としているかを見分けることを困難にします。

    他のオブジェクトが定義されたインターフェイスを介して他のオブジェクトにアクセスできるようにするアクセサクラスをコンフィグクラスに追加します。これにより、configクラスとインターフェースするコードを壊さずに、クラスの内部を変更することができます。

    関連する問題