2009-06-22 8 views
1

저는 C++ 네임 스페이스 개념을 좋아합니다. 이름 충돌을 피하면서 소스 코드를 간결하게 유지하는 데 도움이되기 때문입니다. .cpp 파일에서는 "using namespace"선언을 사용하여 매우 잘 작동합니다. 그러나 헤더 파일에서 "네임 스페이스 사용"이 현재 헤더 파일 내에서뿐만 아니라 이후에 컴파일되는 모든 것에 적용된다는 것을 의미하므로 네임 스페이스를 "손상 시키므로"사용할 수 없습니다. 이것은 부분적으로 네임 스페이스의 이점을 무효화합니다. 예를 들어 "ourlib :: networking :: IpAddress"와 "ourlib :: filesystem :: Path"클래스가 자주 사용되는 헤더 파일을 고려해보십시오.C++ 헤더 파일의 네임 스페이스

헤더 파일에서 "네임 스페이스 사용"- 선언의 효과를 제한하는 방법이 있습니까?

답변

2

아니오, 그것은 :(

0

당신은 하나의 클래스를 가져올 수 있습니다

내 기억이 맞다 적어도 경우
using ourlib::networking::lpAddress; 

)

이는하지만, 여전히 글로벌 네임 스페이스를 오염시킬 수 있습니다. 필자는 헤더 파일에 긴 네임 스페이스 접두어 만 사용하는 경향이 있습니다. 이렇게하면 다른 개발자의 헤더 파일을 더 쉽게 읽을 수 있습니다. 어떤 클래스가 어떤 네임 스페이스에서 왔는지 조회 할 필요가 없기 때문입니다. 그들은 대부분 프로젝트에서 독특한 당신은 문제가하지 않는다면

+2

>이 일을 할 수 없다 (나는 namespace ourlib 내부의 모든 헤더를 가정) 글로벌 네임 스페이스로의주지 않고 직접 할 수 액세스 lpAddress이 될 것입니다 이것은 전역 네임 스페이스를 오염시킬 수 있습니다. <이것은 글로벌 네임 스페이스에 오염 될 것입니다. – Artyom

+0

오염에 의한 것인가에 달렸습니다. 제 생각에는 하나의 클래스를 가져 오는 것이 헤더를 포함하여 구현 파일로 제한되는 경우 벌금을 부과 할 수 있습니다. 다른 헤더들은 절대적으로 필요하다면, 대신 forward 선언문을 사용하십시오. 이것은 컴파일 시간을 향상시키기위한 것입니다. – OregonGhost

+0

그 외의 것을 추가하는 것을 잊었습니다. 너와 함께. 제가 말했듯이, 저는 주로 정규화 된 이름을 사용합니다. – OregonGhost

4

당신은 넣어, 대부분의 자주, 그래서

namespace ourlib { 
    using networking::lpAddress; 
} 

처럼의 :: ourlib 네임 스페이스의 클래스를 사용할 수 있습니다. 그래서에서, 헤더의 모든 장소 당신은