2012-04-24 88 views
-2

我有類配置:在類之間交換變量的正確方法是什麼?

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

什麼是從其他類訪問該值的正確方法?有幾個選項:

  1. 使其全球
  2. 轉移參考其他類
  3. 您變種

在我的系統,config.var.some需要在類的90%。

+1

[可以將哪些設計模式應用於配置設置問題?](http://stackoverflow.com/questions/1314730/which-design-patterns-can-be-applied-to-the-configuration -settings-problem) – Johnsyweb 2012-04-24 23:16:01

回答

3

3)你可以使用靜態,這基本上就像它是全局的。

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

//these in a cpp file 
CData Config::var = Config::Read(); 

int main() { 
    std::cout << Config.var.something; 
} 

但在這種情況下,它可能是最好的只是爲了讓自己var全球。

1

第三種方式:在Config類中添加存取函數。

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

我想他想要一個單獨的'Config'單例類的東西。 – 2012-04-24 23:15:17

+0

啊,那麼。然後我投票使它成爲全局的(或者使其成爲另一個全球單例實例的成員,比如'QApplication')。 – jpalecek 2012-04-24 23:22:41

+0

不明白。在例如main()我做Config.Read() - 解析配置文件。在接下來的某些課程中,我會如何得到你的建議? – askovpen 2012-04-24 23:23:56

1

我通常會傳遞一個像這樣的對象作爲參考,而不是懶惰並使其成爲全局對象。如果你傳遞了這個對象,那麼通過查看構造函數/成員初始值設定項列表就可以明確哪些類將使用該對象。相反,使它成爲全局的(作爲單身或其他)會讓你或其他人很難看出哪些類需要一目瞭然。

將配件函數添加到配置類中,允許其他對象通過定義的接口訪問其成員。這將允許您在不破壞與配置類接口的代碼的情況下更改類的內部。

相關問題