2012-12-13 42 views
3

基本上,我用下面的格式提供的一些頭文件的工作:是否有可能恢復爲「默認」全局名稱空間?

#include <iostream> 

using namespace std; 

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

我的問題是,因爲我不能修改提供的頭,我怎麼剝std命名空間在我的文件,去回到默認的全局命名空間?我試過「using namespace ::;」和「using namespace ;」,但是編譯器對這兩者都不滿意。任何關於如何用命名空間強制執行清理的想法?

回答

7

你不能。這就是爲什麼using namespace條款是如此之多。你可以包括另一個命名空間內,雖然這些頭:

namespace bleh { 
    #include "library_that_uses_evul_using_namespace.h" 
} 

這會污染只有bleh命名空間。

+2

@Karthik,evul> evil – mfontanini

+0

+1 @mfontanini哈哈,現在好多了? –

+0

@KarthikT是的! :D – mfontanini

4

你不能擺脫「使用命名空間」。你可以有多個「using namespace」語句,它們是可加的。

但是,你可以用惡意頭到它自己的命名空間:

namespace Crap 
{ 
    #include "maliciousHeader.h" 
} 

這樣的「使用命名空間std」只適用於命名空間的垃圾。我建議將上面的代碼放入另一個頭部,這是您實際包含在程序中的頭部。

+0

好的建議是在另一個標題內的命名空間內對標題進行沙箱處理。我想我從現在開始這樣做。 – eestrada

+0

請記住,如果在頭部旁邊有一個cpp,因爲Crap名稱空間成爲鏈接器用來匹配聲明和定義的標識符的一部分,所以它不起作用。只要你可以,改變破損的頭文件。 – Peter