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

时间:2010-11-04 02:28:07

标签: c++ file header namespaces

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

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

例如,如果我有一个定义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文件而不是这样做,而是以某种方式表明它们是该命名空间的一部分。

对不起,我还是很陌生。

3 个答案:

答案 0 :(得分:35)

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

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

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

答案 1 :(得分:4)

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

除了向外界透露的任何其他内容仍然可以放在相同的命名空间中,但是放在一个单独的头文件中(未发货)。

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

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

Header H2.h(不是外部世界的库接口的一部分)

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

答案 2 :(得分:1)

是的,只需在实现文件中使用名称空间指令。