如何扩展指定的命名空间

时间:2016-03-02 12:10:28

标签: c++ c++11 namespaces c++14 c++17

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

namespace library {
  namespace part {
  }
}

当前项目中还有一个层次结构。我想用其他名称将 library :: part 导入并扩展到我的项目中。我尝试做如下:

#include <library/part>

namespace project {
  namespace my_part = library::part;
}

namespace project {
  namespace my_part {
    void my_extension_1();
    void my_extension_2();
  }
}

该方案可以使用该语言的当前工具完成吗?如果没有,应该如何解决?仍然没有,为什么?

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

  

错误:命名空间'project :: my_part'

的冲突声明

编辑:有关于扩展原始命名空间的建议,但我要求的是。 library :: part 用户不应该直接访问我添加的功能。

1 个答案:

答案 0 :(得分:2)

我相信你想要创建一个包含你自己的命名空间 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;
}