mus*_*nul 4 c++ namespaces c++11 c++14 c++17
我想通过一个例子来解释我的问题。我正在使用第三方库,有自己的命名空间。我想导入这个库的一部分,在下面提到的命名空间内有自己的命名空间。
\n\nnamespace library {\n namespace part {\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\n当前项目中也存在层次结构。我想使用另一个名称将库::part导入并扩展到我的项目中。我尝试执行以下操作:
\n\n#include <library/part>\n\nnamespace project {\n namespace my_part = library::part;\n}\n\nnamespace project {\n namespace my_part {\n void my_extension_1();\n void my_extension_2();\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\n该场景可以用该语言当前的工具来完成吗?如果不是,应该如何解决?还是不行,为什么?
\n\n编辑:错误消息 gcc 5.3.0 转储:
\n\n\n\n\n错误:命名空间 \xe2\x80\x98project::my_part\xe2\x80\x99 的声明冲突
\n
编辑:有一个关于扩展原始名称空间的建议,但我正在要求。Library::part用户不应直接访问我添加的功能。
\n我相信您想创建一个自己的命名空间,其中包含所有library::part包含的内容,除此之外,而不需要在library::part. 像这样?
namespace library {
namespace part {
const int library_part_i = 123;
}
}
namespace project {
namespace part {
using namespace library::part;
void my_extension_1(){};
void my_extension_2(){};
}
}
int main()
{
// const int i = library_part_i; <- Does not compile
// const int i = project::library_part_i; <- Does not compile
const int i = project::part::library_part_i;
// library::part::my_extension_1(); <- Does not compile
project::part::my_extension_2();
return 0;
}
Run Code Online (Sandbox Code Playgroud)