2013-02-01 117 views
3

我正在開發C++庫,提供與圖像/信號處理和其他內容相關的不同功能。它基本上是一個供開發人員進一步使用的開發庫。我希望它儘可能方便和易於使用。我心裏有3種不同的模式:推薦的C++庫設計

模型1:

包含庫的所有功能的單一大命名空間。例如C++標準庫在namespace std內實現。或者在namespace cv內部實現OpenCV。

namespace library 
{ 
    //all classes, variables, functions, datatypes are present inside this namespace 
} 

模型2:

父命名空間,根據功能進一步細分成子名字空間。 e.g .NET框架的父namespace System包含namespace Collectionsnamespace Windows等等

namespace library 
{ 
    //datatypes go here 

    namespace group1 
    { 
     //functions related to group 1 
    } 

    namespace group2 
    { 
     //functions related to group 2 
    } 

    . 
    . 
    . 
} 

模型3:

幾乎一樣的模型2,但包含的功能類,而不是命名空間static成員。

namespace library 
{ 
    //datatypes go here 

    class group1 
    { 
    public: 
     static function1(); 
     static function2(); 
    } 

    class group2 
    { 
    public: 
     static function1(); 
     static function2(); 
    } 
} 

我需要建議這些設計模型哪個最好?還有其他更好的方法嗎? 目前我很喜歡第二款車型。

+3

使用任何有意義的你代碼(看看boost,例如,沒有一個標準,每個庫都根據需要使用嵌套命名空間......)但我要說的一件事是,使用命名空間而不是類來分組函數... – Nim

+0

我個人發現模型2更直觀,並且讓我知道如果我需要在API中找到某些東西,我應該在哪裏看看。 – jviotti

回答

5

如果函數可以獨立使用(看起來是這樣,看看你的建議),並且可以將多個函數語義分組,我絕對會選擇第二個選項。


選項1:把一切都在一個單一的namespace會導致增加太多不同的東西,歸納爲一個單一的組。

選項2:我發現它比其他更直觀。由於圖書館結合了幾個完全不同的東西,所以將所有這些羣組中的所有羣組分組成一個好名字似乎是一個好主意,它們是名稱 - 圖書館名稱的大型namespace的一部分。

選項3:此選項與選項2幾乎相同,但使用class而不是namespace對我來說似乎不好。 C++標準爲此提供了namespace,請使用它們。


但它真的取決於圖書館,你會寫。老實說,選擇其中一個選項,然後切換到另一個選項並不是什麼大問題。所以,你可以開始使用這些選項之一,如果事情變得很難看,那麼其他一些選擇將會是一個更好的選擇 - 就這樣做。


例子:我有自己的圖書館,它實現了插座,線程,IPC通信等包裝我選擇的結構正是你在選項有什麼建議2.

+1

謝謝你的答案...選項2它是:)。 – sgarizvi