是否可以恢复到"default"全局命名空间?

Is it possible to revert back to "default" global namespace?

本文关键字:default 全局 命名空间 恢复 是否      更新时间:2023-10-16

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

#include <iostream>
using namespace std;
class bar
{
public:
    void printSomething(void)
    {
        cout << "This is an example." << endl;
    }
}

我的问题是,由于我无法修改提供的标头,因此如何去除文件中的std命名空间并返回到默认的全局命名空间?我已经尝试了" using namespace ::; "和" using namespace ;",但编译器对其中任何一个都不满意。关于如何使用命名空间强制清理石板的任何想法?

你不能。这就是为什么using namespace条款如此猥琐的原因。不过,您可以将这些标头包含在另一个命名空间中:

namespace bleh {
    #include "library_that_uses_evul_using_namespace.h"
}

这只会污染bleh命名空间。

您无法摆脱"using 命名空间"。你可以有多个"使用命名空间"语句,它们是累加的。

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

namespace Crap
{
    #include "maliciousHeader.h"
}

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