라이브러리의 정규화 된 이름이 필요한지 알고 싶습니다.라이브러리의 네임 스페이스 사용
namespace A {
namespace B {
namespace C {
class Foo { ... };
} // namespace C
::A::B::C::Foo foo;
// or
C::Foo foo
} // namespace B
namespace D {
::A::B::C::Foo foo;
// or
B::C::Foo foo
} // namespace D
} // namespace A
내가 완전히 C++ 표준의 3.4 장을 이해하지 못했지만, 나는 내가 STL 벡터 헤더에 설명 할 수없는 무언가를 보았다 :
예를 들어 (I 가독성 여기 네임 스페이스를 들여) (읽기 쉽도록 단순화) : 것은이 _STD이 :: ..하지만 이름에 대한 이해에 따라 찾아 볼 표준을 ::하도록 확장되어
namespace std {
template<..
class reverse_iterator
{ ... };
template<..
class vector {
typedef _STD reverse_iterator<const_iterator> const_reverse_iterator;
...
}
}
, reverse_iterator 벡터에 대한 조회했을 먼저에 std 인 부모 네임 스페이스. 충돌은 어떻게 가능합니까?
부수적 인 질문 : 템플릿의 이름에 대한 이름 조회 규칙은 인수가있는 함수입니까? 정규화 된 ID는 이미 ADL없이 선언 된 이름을 직접 볼 수는 있지만 정규화되지 않은 이름은 ADL을 수행한다고 생각합니다. 맞습니까?
미리 답변 해 주셔서 감사합니다.
나는 항상 내 네임 스페이스를 정규화합니다. 컴파일러와 아무런 차이가 없지만 나중에 다시 돌아와 몇 년 후에 다시 볼 때 코드를 훨씬 쉽게 이해하고 탐색 할 수 있습니다. –
가끔은 명확성을 위해서만 사용하지만 A :: 대신 ... 전역 범위 한정 :: A :: ...에 대해 더 궁금합니다. 필자는 3 가지 레벨의 네임 스페이스를 가지고 있으며, 전체 이름이 너무 길어 명료성의 이점을 얻기가 쉽지 않습니다. – ThiSpawn