隐藏第三方命名空间是否危险

Is shadowing 3rd party namespaces dangerous?

本文关键字:危险 是否 命名空间 第三方 隐藏      更新时间:2023-10-16

我经常发现自己处于第三方库可以使用某些当前不存在的功能或实用程序的情况。在编写这些配套实用程序时,会出现将它们放入哪个命名空间的问题。

我选择了一个约定来隐藏我自己的 3rd 方命名空间,但我并不完全说服自己没有潜伏着不必要的影响。

示例实用程序标头:

#include <third_party/Thing.hpp>
namespace my_namespace
{
    namespace third_party
    {
        typedef ::third_party::Thing<int,3> Thing3i
    }
}

所以问题是:这样做有什么重大的负面影响吗?

我没有特别看出任何错误,但我要提醒的是,如果出现歧义或膨胀,请不要用第三方命名空间污染您的命名空间,对于这个问题有一个很好的答案,嵌套命名空间是否是一个好主意:C++命名空间建议,C++中的嵌套命名空间和此处命名空间在 c++ 中的用法。

一般来说,它应该是安全的,我会using namespace third_party使用限制为只有 cpp 文件,否则如果你要在标头中声明using namespace third_party,那么#include标头的代码将意外获取第三方命名空间,除非您真的希望发生这种情况。