2010-11-04 38 views
19

我想創建一個名稱空間,它將包含幾個類作爲「包」的一部分。C++命名空間和在單獨文件中定義類

我必須聲明名稱空間內的所有類嗎?

例如,如果我有一個定義2dEngine命名空間的「2dEngine.h」,是否必須聲明該頭文件中的所有單個類?或者我仍然可以將它們分離爲單獨的頭文件(.h)文件,並讓它們成爲命名空間的一部分?

僞例如:

TwoEngine.h

namespace TwoEngine 
{ 
    class Canvas 
    { 
     // Define all of Canvas here 
    }; 

    class Primitive 
    { 
     // Define all of Primitive here 
    }; 
} 

而是這樣做的,我想有帆布和原始將自己的.h文件,只是在某種程度上說明,他們是一部分該命名空間。

對不起,我還是很新的。

回答

25

是的,你可以將命名空間拆分爲多個塊(因此也可以是文件)。只要在namespace區塊中聲明同名,則您的類將屬於相同的名稱空間。

// Canvas.h 
namespace TwoEngine 
{ 
    class Canvas 
    { 
     // Define all of Canvas here 
    }; 
} 

// Primitive.h 
namespace TwoEngine 
{ 
    class Primitive 
    { 
     // Define all of Primitive here 
    }; 
} 
3

命名空間可能不連續。您可以通過在您的2DEngine.h中保留相關的類來利用這一點,這些類可能會被客戶端代碼使用,並將作爲庫的一部分發送。

任何其他的東西,不會被透露給外界仍然可以放在相同的命名空間,但在一個單獨的頭文件(這是不發貨)。

部首H1.h(庫接口到外部世界的一部分)

namespace TwoEngine 
{ 
    class Canvas 
    { 
     // Define all of Canvas here 
    }; 
} 

部首H2.h(未庫接口到外部世界的一部分)

#include "H1.h" 
namespace TwoEngine  // reopen the namespace and extend it 
{ 
    class Primitive 
    { 
     // Define all of Primitive here 
    }; 
} 
0

是也可以在實現文件中使用名稱空間指令。