我想创建一个名称空间,它将包含几个类作为“包”的一部分。
我是否必须声明命名空间中的所有类?
例如,如果我有一个定义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文件而不是这样做,而是以某种方式表明它们是该命名空间的一部分。
对不起,我还是很陌生。
答案 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)
是的,只需在实现文件中使用名称空间指令。