如何扩展指定的命名空间

mus*_*nul 4 c++ namespaces c++11 c++14 c++17

我想通过一个例子来解释我的问题。我正在使用第三方库,有自己的命名空间。我想导入这个库的一部分,在下面提到的命名空间内有自己的命名空间。

\n\n
namespace library {\n  namespace part {\n  }\n}\n
Run 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}\n
Run Code Online (Sandbox Code Playgroud)\n\n

该场景可以用该语言当前的工具来完成吗?如果不是,应该如何解决?还是不行,为什么?

\n\n

编辑:错误消息 gcc 5.3.0 转储:

\n\n
\n

错误:命名空间 \xe2\x80\x98project::my_part\xe2\x80\x99 的声明冲突

\n
\n\n

编辑:有一个关于扩展原始名称空间的建议,但我正在要求。Library::part用户不应直接访问我添加的功能。

\n

Mik*_*han 5

我相信您想创建一个自己的命名空间,其中包含所有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)