네임 스페이스를 "사용하지"하려면 어떻게해야합니까?
내 개발 시스템 (Codegear C ++ Builder)의 모호한 점 중 하나는 자동 생성 된 헤더 중 일부가 ...
using namespace xyzzy
... 내가 원치 않거나 기대하지 않을 때 내 코드에 영향을 미치는 진술.
이것을 피하기 위해 이전 "using"문을 어떻게 든 취소 / 재정의 할 수있는 방법이 있습니까?
아마도...
unusing namespace xyzzy;
아니. 그러나 잠재적 인 해결책이 있습니다. include 지시문을 이와 같이 자체 네임 스페이스로 묶으면 ...
namespace codegear {
#include "codegear_header.h"
} // namespace codegear
... 그런 다음 해당 헤더 내의 모든 using 지시문의 효과가 무효화됩니다.
어떤 경우에는 문제가 될 수 있습니다. 이것이 모든 C ++ 스타일 가이드 가 헤더 파일에 "using namespace"지시문을 넣지 않도록 강력하게 권장하는 이유 입니다.
아니요 , 네임 스페이스를 사용 취소 할 수 없습니다 . 당신이 할 수있는 유일한 일은- 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 버전 이후로 다음과 같은 두려운 using namespace System;
int 를 피하기 위해 #define 할 수있는 새로운 값이 있습니다 . 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);
}
참고 URL : https://stackoverflow.com/questions/167862/how-can-i-unuse-a-namespace
'Program Tip' 카테고리의 다른 글
C에서 exit ()를 사용해야합니까? (0) | 2020.10.14 |
---|---|
R에서 두 목록을 결합하는 방법 (0) | 2020.10.14 |
C #에서 system.net.webrequest를 사용하여 JSON 응답을 얻는 방법은 무엇입니까? (0) | 2020.10.14 |
JavaScript 함수의 이름을 지정하고 즉시 실행할 수 있습니까? (0) | 2020.10.14 |
정적으로 링크 된 라이브러리 간의 기호 충돌을 처리하는 방법은 무엇입니까? (0) | 2020.10.14 |