是否有可能恢复到"默认"全局命名空间?

ees*_*ada 3 c++ namespaces using-directives

基本上,我正在使用一些提供的头文件,格式如下:

#include <iostream>

using namespace std;

class bar
{
public:
    void printSomething(void)
    {
        cout << "This is an example." << endl;
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,由于我无法修改提供的标头,如何std在文件中删除命名空间并返回默认的全局命名空间?我试过" using namespace ::;"和" using namespace ;",但编译器对这两种方法都不满意.关于如何使用命名空间强制清除平板的任何想法?

mfo*_*ini 7

你不能.这就是为什么这个using namespace条款是如此的回避.您可以将这些标头包含在另一个名称空间中:

namespace bleh {
    #include "library_that_uses_evul_using_namespace.h"
}
Run Code Online (Sandbox Code Playgroud)

这将仅污染bleh命名空间.

  • @Karthik,evul>邪恶 (2认同)

Pet*_*ter 5

您无法摆脱“使用命名空间”。您可以有多个“using namespace”语句,并且它们是附加的。

但是,您可以将恶意标头包装到它自己的命名空间中:

namespace Crap
{
    #include "maliciousHeader.h"
}
Run Code Online (Sandbox Code Playgroud)

这样,“using namespace std”仅适用于命名空间 Crap。我建议将上述代码放入另一个标头中,该标头是您实际包含在程序中的标头。