我有一个项目,其中需要嵌套命名空间,但这些命名空间将分布在多个标题上。
//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;
}
还是有其他适当的处理此类案件。
由于
答案 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。毕竟,第二种方法允许避免命名空间名称中的拼写错误。