C ++의 네임 스페이스 및 연산자 과부하
-
05-07-2019 - |
문제
특정 네임 스페이스에서 라이브러리를 작성할 때 해당 네임 스페이스의 클래스에 과부하 된 연산자를 제공하는 것이 종종 편리합니다. 오버로드 된 연산자는 라이브러리의 네임 스페이스에서 구현 될 수있는 것으로 보입니다 (적어도 G ++).
namespace Lib {
class A {
};
A operator+(const A&, const A&);
} // namespace Lib
또는 글로벌 네임 스페이스
namespace Lib {
class A {
};
} // namespace Lib
Lib::A operator+(const Lib::A&, const Lib::A&);
내 테스트에서 둘 다 잘 작동하는 것 같습니다. 이 두 옵션 사이에 실질적인 차이가 있습니까? 어느 쪽이든 접근이 더 좋습니까?
해결책
라이브러리 네임 스페이스에서 정의해야합니다. 컴파일러는 어쨌든 인수 종속 조회를 통해 그들을 찾을 것입니다.
글로벌 네임 스페이스를 오염시킬 필요가 없습니다.
다른 팁
라이브러리 네임 스페이스에 넣는 것은 그로 인해 작동합니다 Koenig 조회.
구문은 장점이 적고 글로벌 네임 스페이스를 혼란스럽게하지 않기 때문에 네임 스페이스에서 정의해야합니다.
실제로 클래스 정의에서 과부하를 정의하면이 질문이됩니다.
namespace Lib {
class A {
public:
A operator+(const A&);
};
} // namespace Lib
제휴하지 않습니다 StackOverflow