【问题标题】:How to extend an assigned namespace如何扩展分配的命名空间
【发布时间】:2016-03-02 12:10:28
【问题描述】:

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

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 用户不应直接访问我添加的功能。

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-05
      • 1970-01-01
      • 1970-01-01
      • 2014-09-18
      • 1970-01-01
      • 2011-06-28
      • 2017-05-10
      相关资源
      最近更新 更多