C++命名空间和在单独的文件中定义类

gui*_*ar- 32 c++ namespaces header file

我想创建一个名称空间,它将包含几个类作为"包"的一部分.

我是否必须声明命名空间中的所有类?

例如,如果我有一个定义2dEngine命名空间的"2dEngine.h",我是否必须在该头文件中声明所有单独的类?或者我仍然可以将它们分成单独的标题(.h)文件并让它们成为命名空间的一部分?

伪示例:

TwoEngine.h

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

    class Primitive
    {
        // Define all of Primitive here
    };
}
Run Code Online (Sandbox Code Playgroud)

而不是这样做,我想让Canvas和Primitive成为他们自己的.h文件,并且只是某种程度上声明它们是该命名空间的一部分.

对不起,我还是很陌生.

Ale*_*x B 38

是的,您可以将命名空间拆分为多个块(以及文件).只要在namespace具有相同名称的块中声明它们,您的类将属于同一名称空间.

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

// Primitive.h
namespace TwoEngine
{
    class Primitive
    {
        // Define all of Primitive here
    };
}
Run Code Online (Sandbox Code Playgroud)

  • 功能相同吗?对于嵌套命名空间? (2认同)

Chu*_*dad 7

命名空间可以是不连续的。您可以通过在2DEngine.h中保留相关的类来利用这一点,该类可能将由客户端代码使用,并将作为您的库的一部分提供。

不需要透露给外界的任何其他内容,仍可以放在相同的名称空间中,但可以放在单独的头文件(不附带)中。

标题H1.h(库接口到外部世界的一部分)

namespace TwoEngine 
{ 
    class Canvas 
    { 
        // Define all of Canvas here 
    }; 
}
Run Code Online (Sandbox Code Playgroud)

头文件H2.h(不属于外部环境的库接口)

#include "H1.h"
namespace TwoEngine      // reopen the namespace and extend it
{
    class Primitive 
    { 
        // Define all of Primitive here 
    }; 
}
Run Code Online (Sandbox Code Playgroud)