2011-11-08 38 views
4

我有許多小功能,這是每一個做一個單一的東西例如像做法。最佳處理許多單一功能

它不值得將每個功能包裝到一個類中。

什麼是C++中的最佳實踐來處理這種不同的許多小功能呢?

也許寫一些叫Helper的類,比如NetworkHelpers?

回答

6

namespace將它們是一種選擇。我不認爲需要上課。一個類的實例是表示一個狀態的意思,但是你正在描述一堆免費函數,所以是一個無狀態系統。 「這是不值得把每個功能都包裝進單一課堂。」 - 這是不作出決定不寫一個類的有效論據。一個類可以有單個成員和一個單一的方法,但是如果它背後有邏輯,你應該寫它。

如果你的職責,你的邏輯任務使用的一類,你的函數具有相同的邏輯,但操作因對象的不同,通過各種手段,寫一個類。如果您的唯一目的是將這些函數組合在一起,那麼當它們的邏輯不真正依賴於一個類的同一個實例時,將它們分組到一個名稱空間中。

根據你的問題的一個例子:

namespace NetworkHelpers 
{ 
    //free function, use a namespace 
    bool pingServer(std::string hostname); 
} 

//alternative, where the object has a state: 
class ServerConnection 
{ 
    std::string _hostname; 
public: 
    NetworkHelpersClass(std::string hostname) 
    { 
     _hostname = hostname; 
    } 
    bool pingServer() 
    { 
     return NetworkHelpersNamespace::pingServer(_hostname); 
    } 
}; 

正如你所看到的,命名空間中,該功能不依賴於除參數以外的任何其他。

類裏面,因爲它有一個狀態,你(根據不同的對象如此相似的行爲,但不同)創建一個對象的每個服務器,調用不帶參數的函數作爲對象都有一種狀態。

我希望這說清楚。

+1

其中「功能」的意思是「班級」? :) – themel

+0

@themel,是的,只要我點擊發布按鈕,我就編輯了我的答案。 :) –

+0

我會補充一點:當選擇命名空間時,將函數放在同一個命名空間(不是'std')作爲它的一個參數是很好的習慣(顯然,這裏是選擇) 。如果它沒有生存在命名空間中的任何參數(除了'std'),請考慮它的返回類型的命名空間。如果沒有名稱空間invovled ...然後創建一個。 –

1

與某些語言不同,C++不要求您將每個函數都放在類中。如果你有不屬於類的函數,把它們放在一個名字空間中。 DLL中照看它們的依賴組的功能:

0

如果我可以添加除名稱空間之外的其他最佳實踐。 避免循環鏈接並儘可能使用最少數量的依賴項創建低級庫。