簡體   English   中英

C ++命名空間和在單獨的文件中定義類

[英]C++ namespaces and defining classes in separate files

我想創建一個名稱空間,它將包含幾個類作為“包”的一部分。

我是否必須聲明命名空間中的所有類?

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

偽示例:

TwoEngine.h

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

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

而不是這樣做,我想讓Canvas和Primitive成為他們自己的.h文件,並且只是某種程度上聲明它們是該命名空間的一部分。

對不起,我還是很陌生。

是的,您可以將命名空間拆分為多個塊(以及文件)。 只要在namespace塊中使用相同名稱聲明它們,您的類將屬於同一名稱空間。

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

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

命名空間可能是不連續的。 您可以通過在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 
    }; 
}

是的,只需在實現文件中使用名稱空間指令。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM