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 ;
",但编译器对这两种方法都不满意.关于如何使用命名空间强制清除平板的任何想法?
你不能.这就是为什么这个using namespace
条款是如此的回避.您可以将这些标头包含在另一个名称空间中:
namespace bleh {
#include "library_that_uses_evul_using_namespace.h"
}
Run Code Online (Sandbox Code Playgroud)
这将仅污染bleh
命名空间.
您无法摆脱“使用命名空间”。您可以有多个“using namespace”语句,并且它们是附加的。
但是,您可以将恶意标头包装到它自己的命名空间中:
namespace Crap
{
#include "maliciousHeader.h"
}
Run Code Online (Sandbox Code Playgroud)
这样,“using namespace std”仅适用于命名空间 Crap。我建议将上述代码放入另一个标头中,该标头是您实际包含在程序中的标头。