不连贯的嵌套命名空间

时间:2015-12-17 13:26:22

标签: c++ namespaces

我有一个项目,其中需要嵌套命名空间,但这些命名空间将分布在多个标题上。

//BaseDeclaration.h
namespace Base_NS
{
namespace Element_NS{};
namespace StockItem_NS{};
}

这是我的基本标题的结构。

现在我想在Element.h中使用Element_NS或在StockItem.h中使用StockItem_NS 使用这些不连续的嵌套命名空间的最佳方法是什么。

//Element.h
namespace Base_NS{
namespace Element_NS{
int data;
}
}

or 

namespace Element_NS{
int data;
}

还是有其他适当的处理此类案件。

由于

2 个答案:

答案 0 :(得分:4)

直到c ++ 17:

namespace Base_NS{
  namespace Element_NS{
    int data;
  }
}

从c ++ 17开始:

namespace Base_NS::Element_NS {
  int data;
}

答案 1 :(得分:1)

首先,您不应在BaseDeclaration.h文件中声明空命名空间。

在共享命名空间中编写代码有两种方法。首先是一个简单的,你只需要在必要时编写名称空间,如上所述。

namespace Base_NS {
namespace Element_NS {
    int data;
}
}

或者您可以定义宏(BaseDeclaration.h文件适合它)

#define BEGIN_ELEMENT_NS 
    namespace Base_NS { \
    namespace Element_NS {

#define END_ELEMENT_NS }}

然后使用它

BEGIN_ELEMENT_NS
    int data;
END_ELEMENT_NS

第二种方法用于一些库,如Qt和Boost。毕竟,第二种方法允许避免命名空间名称中的拼写错误。