2013-01-15 36 views
1

1)實用工具類,只使用靜態方法,塊複製和創造我們應該如何在C++中實現實用/輔助模塊?

class myUtils 
{ 
public: 
    static void utilFunc(); 
    static void utilGreatFunc(); 

private: 
    utils() { } // block creation 
    utils(const utils &) { } 
    ~utils() { } 
} 

2)使用命名空間

namespace myUtils 
{ 
    void utilFunc(); 
    void utilGreatFunc(); 
} 

什麼是這樣做的最佳方式?我認爲命名空間的方式,對我來說更爲清晰,寫起來也更簡單。或者也許還有其他更好的設計?

+2

什麼都?現在你可以寫'utils :: utilClass :: utilFunc()'!你的代碼中永遠不會有足夠的單詞「utils」的實例。 –

+0

是的,當然,我編輯了代碼和類/名稱空間的名稱。對於每個庫,模塊都可以有單獨的實用程序類/名稱空間。 – fen

回答

2

你永遠不會使用「實用類靜態方法」,在C++。這是一個Java-ISM。相反,使用你的第二個解決方案,並把功能放在namespace

+1

嚴格來說,具有靜態函數的類確實有效,並且是一種有效的方法。也就是說,它不是很有語義性,具有名稱空間級別函數的名稱空間更有意義。還值得指出的是,你可以嵌套命名空間 – thecoshman

+0

thecoshman:我從來沒有嘗試過,但你可以嵌套內部類? – BlueTrin

+1

@BlueTrin:你可以。但請注意,這些在C++和Java中的工作方式不同(對靜態方法不重要)。 – MSalters

1

幾年前,有許多關於輔助類,你仍然可以搜索和閱讀的討論。我對此的看法是助手們幾乎總是難聞的氣味(強烈的)。他們讓我們看到程序員不知道把代碼放在哪裏,然後他創建了一個MyBagOfThingsHelper類,它打破了OOP最基本的原則。

也許,最重要的是SRP。問問你自己:哪個是MyBagOfThingsHelper類的責任?

什麼它創造的強耦合?

我知道這既不是你要的也不是你想閱讀,但什麼是最好的既不是命名空間,也不類,但避免他們,避免他們。

+1

絕對不應該用絕對語言來說話。 –

+0

對不起,但我試圖讓我清楚,當我說「我的意見」,其餘的只是因爲缺乏足夠的英語。 – lontivero

相關問題