부스트 :: 변형이 연산자를 제공하지 않는 이유는 무엇입니까! =
-
20-08-2019 - |
문제
두 가지 동일하게 주어졌습니다 boost::variant
인스턴스 a
그리고 b
, 표현식 ( a == b )
허용됩니다.
하지만 ( a != b )
정의되지 않은 것 같습니다. 왜 이런거야?
해결책
도서관에 추가되지 않았다고 생각합니다. Boost.operators는 Boost :: Operator :: Equality_comparable에서 파생 되었기 때문에 실제로 도움이되지 않습니다. David Pierre는 당신이 그것을 사용할 수 있다고 말할 수 있지만, 당신의 응답도 맞습니다. 새 연산자는 ADL에서 찾을 수 없으므로 사용하는 연산자가 필요합니다.
Boost-users 메일 링리스트에서 이것을 묻습니다.
@afoglia의 의견 편집 :
7 개월 후, 나는 Boost.variant를 공부하고 있으며, 나는 누락 목록에 대한이 더 나은 설명을 우연히 발견하고 있습니다.
http://boost.org/archives/boost/2006/06/105895.php
operator==
전화 operator==
현재 변형에있는 실제 클래스의 경우. 마찬가지로 전화 operator!=
또한 전화해야합니다 operator!=
수업의. (이론적으로 클래스를 정의 할 수 있기 때문에 a!=b
동일하지 않습니다 !(a==b)
.) 따라서 변형의 클래스에 operator!=
. (메일 링리스트 스레드 에서이 가정을 할 수 있는지에 대한 논쟁이 있습니다.)
다른 팁
이것은 저자 자신의 답변 링크 이 질문이 부스트 메일 링리스트에 공식화되었을 때
저자 의견에서 비교 연산자 (! = 및 <)를 구현하면 변형 유형을 생성하는 데 사용되는 유형에 더 많은 요구 사항이 추가됩니다.
그래도 그의 관점에 동의하지 않습니다.
필요하지 않기 때문입니다.
부스트에는 있습니다 운영자 라이브러리 연산자를 정의합니다! = 연산자의 용어 ==