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

时间:2012-12-13 01:56:00

标签: c++ namespaces using-directives

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

#include <iostream>

using namespace std;

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

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

2 个答案:

答案 0 :(得分:7)

你做不到。这就是为什么using namespace条款如此神韵。您可以将这些标头包含在另一个名称空间中:

namespace bleh {
    #include "library_that_uses_evul_using_namespace.h"
}

这只会污染bleh命名空间。

答案 1 :(得分:4)

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

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

namespace Crap
{
    #include "maliciousHeader.h"
}

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