2012-12-13 5 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

"네임 스페이스 사용"을 제거 할 수 없습니다. 여러 개의 "네임 스페이스 사용"문을 사용할 수 있으며 추가 할 수 있습니다.

그러나, 당신은 자신의 네임 스페이스에 악성 헤더를 포장 할 수 있습니다

namespace Crap 
{ 
    #include "maliciousHeader.h" 
} 

(가) "네임 스페이스 표준을 사용하여"단지 네임 스페이스 쓰레기에 적용되는 방법을. 위의 코드를 실제로 프로그램에 포함 된 헤더 인 다른 헤더에 넣어 두는 것이 좋습니다.

+0

다른 헤더의 네임 스페이스 내에서 헤더를 샌드 박스로 만드는 것이 좋습니다. 나는 지금부터이 일을 시작할 것이라고 생각한다. – eestrada

+0

Crap 네임 스페이스는 링커가 선언 및 정의와 일치시키는 데 사용하는 식별자의 일부가되므로 헤더와 함께 cpp가 있으면 작동하지 않습니다. 가능한 경우 언제든지 손상된 헤더 파일을 변경하십시오. – Peter

관련 문제