【问题标题】:Is shadowing 3rd party namespaces dangerous?遮蔽 3rd 方命名空间是否危险?
【发布时间】:2012-04-24 06:41:29
【问题描述】:

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

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

示例实用程序标头:

#include <third_party/Thing.hpp>

namespace my_namespace
{
    namespace third_party
    {
        typedef ::third_party::Thing<int,3> Thing3i
    }
}

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

【问题讨论】:

    标签: c++ namespaces


    【解决方案1】:

    我没有特别发现任何问题,但我会提醒您不要使用第 3 方污染您的命名空间,以防出现歧义或臃肿,这个问题有一个很好的答案,是否是一个好主意嵌套命名空间:C++ namespaces adviceNested NameSpaces in C++ 和这里 Usage of namespaces in c++

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

    【讨论】:

    • 我不确定我是否误解了你的答案,但我认为这里没有污染我的命名空间的风险。这种东西会在实用程序头中声明,然后在其他地方使用,而不需要任何using namespace
    • @Catskul,很抱歉不清楚,只要您不通过在标题中声明 using namespace third_party 来污染您的命名空间,您的提议是安全的。
    • 好吧,我误会了。我没有意识到您正在对using namespace 进行一般性陈述(不一定与给定的示例具体相关)。
    猜你喜欢
    • 1970-01-01
    • 2012-02-13
    • 1970-01-01
    • 2012-07-18
    • 1970-01-01
    • 2019-11-28
    • 1970-01-01
    • 2017-08-21
    • 1970-01-01
    相关资源
    最近更新 更多