基本上,我正在处理一些提供的头文件,格式如下:
#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;,但编译器对这些中的任何一个都不满意。关于如何使用命名空间强制清除平板的任何想法?
答案 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。我建议将上面的代码放入另一个标题中,这是您实际包含在程序中的标题。