네임 스페이스를 어떻게 "사용하지 못하게"하려면 어떻게해야합니까?

StackOverflow https://stackoverflow.com/questions/167862

  •  03-07-2019
  •  | 
  •  

문제

내 개발 시스템 (CodeGear C ++ Builder)의 미래 중 하나는 자동 생성 헤더 중 일부가 ...

using namespace xyzzy

... 내가 원하거나 기대할 때 내 코드에 영향을 미치는 진술.

이를 피하기 위해 이전 "사용"명령문을 어떻게 든 취소/재정의 할 수있는 방법이 있습니까?

아마도...

unusing namespace xyzzy;
도움이 되었습니까?

해결책

아니요. 그러나 잠재적 인 해결책이 있습니다. 이와 같이 자체 네임 스페이스에 포함 된 지시문을 포함 시키면 ...

namespace codegear {
    #include "codegear_header.h"
} // namespace codegear

... 그러면 해당 헤더 내에서 사용 지시문의 효과가 중화됩니다.

어떤 경우에는 문제가 될 수 있습니다. 그렇기 때문에 모든 C ++ 스타일 가이드가 강력하게 추천합니다. ~ 아니다 헤더 파일에 "네임 스페이스 사용"지침을 넣습니다.

다른 팁

아니요 유용하지 않습니다 네임 스페이스. 당신이 할 수있는 유일한 일은 using namespace-스코프를 제한하기위한 블록.

예시:

{
    using namespace xyzzy;

} // stop using namespace xyzzy here

아마도 자동 생성 헤더에 사용 된 템플릿을 변경할 수 있습니다.

충돌에 대한 명시적인 네임 스페이스를 사용하여 고정 될 수 있습니다.

string x; // Doesn't work due to conflicting declarations
::string y; // use the class from the global namespace
std::string z; // use the string class from the std namespace

향후 참조 : XE 버전이 있으므로 두려움을 피하기 위해 #define 할 수있는 새로운 값이 있습니다. using namespace System; int 포함 : delphiheader_no_implicit_namespace_use

생성 된 헤더가 생성 된 후부터 사용되기 전에 생성 된 헤더를 수정하기 위해 빌드 프로세스의 일부로 SED, PERL 또는 기타 명령 줄 도구를 사용하는 것은 어떻습니까?

Visual Studio 2005를 사용한 빠른 실험은 해당 헤더를 자신의 이름의 네임 스페이스로 동봉 한 다음, 그 다음에 해당 헤더를 동봉 한 다음 use 이 네임 스페이스에서 필요한 것 (그러나하지 마십시오 use 전체 네임 스페이스는 숨길 네임 스페이스를 소개합니다.

#include<iostream>
#include<stdio.h>
namespace namespace1 {
    int t = 10;
}
namespace namespace2 {
    int t = 20;
}
int main() {
using namespace namespace1;
    printf("%d" , t);
    printf("%d" , namespace2::t);
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top