4

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

#include <iostream>

using namespace std;

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

我的问题是,由于我无法修改提供的标头,如何剥离std文件中的命名空间并返回默认的全局命名空间?我已经尝试过“ using namespace ::;”和“ using namespace ;”,但编译器对其中任何一个都不满意。关于如何用命名空间强制一个干净的石板有什么想法吗?

4

2 回答 2

7

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

namespace bleh {
    #include "library_that_uses_evul_using_namespace.h"
}

那只会污染bleh命名空间。

于 2012-12-13T01:59:51.003 回答
5

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

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

namespace Crap
{
    #include "maliciousHeader.h"
}

这样,“使用命名空间标准”仅适用于命名空间废话。我建议将上述代码放入另一个标题中,这是您实际包含在程序中的标题。

于 2012-12-13T01:58:56.630 回答