내 개발 시스템 (Codegear C ++ Builder)의 모호한 점 중 하나는 자동 생성 된 헤더 중 일부가 ...
using namespace xyzzy
... 내가 가장 원하거나 기대하지 않을 때 내 코드에 영향을 미치는 진술.
이것을 피하기 위해 이전 "using"문을 어떻게 든 취소 / 재정의 할 수있는 방법이 있습니까?
아마도...
unusing namespace xyzzy;
내 개발 시스템 (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
자동 생성 된 헤더에 사용되는 템플릿을 변경할 수 있습니다.
향후 참조를 위해 : XE 버전 이후로 다음과 같은 두려운 using namespace System;
int 를 피하기 위해 #define 할 수있는 새로운 값이 있습니다 . DELPHIHEADER_NO_IMPLICIT_NAMESPACE_USE
sed, perl 또는 기타 명령 줄 도구를 빌드 프로세스의 일부로 사용하여 생성 된 헤더를 생성 한 후 사용하기 전에 수정하는 것은 어떻습니까?
#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);
}