c++ - 如何扩展分配的命名空间

标签 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 转储:

error: conflicting declaration of namespace ‘project::my_part’

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

最佳答案

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

关于c++ - 如何扩展分配的命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35746867/

相关文章:

c++ - 在 C++ 中对我的二维数组进行排序

c++ - Hook 和控制后台进程的输入事件

c++ - 如何在另一个类的 vector 中调用派生类的析构函数

c++ - 当我使用 C++11 兼容编译器编译 boost 1.48\1.47 代码时,我最终会得到像 share_ptr 这样的东西的标准实现吗?

c++ - 命名空间内的友元函数声明/定义

c++ - 不清楚 `delete` 和指针

c++ - 在为函数编写单元测试时,我应该模拟所做的内部函数调用吗?

c++ - 长 std::initializer_list 包含许多用于测试的元素

javascript - 有没有办法命名自定义 Web 组件?

c++ - “stdx”不是为 ptr_vector 程序显示的 namespace 名称错误