부스트 :: 변형이 연산자를 제공하지 않는 이유는 무엇입니까! =

StackOverflow https://stackoverflow.com/questions/1044448

  •  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!=. (메일 링리스트 스레드 에서이 가정을 할 수 있는지에 대한 논쟁이 있습니다.)

다른 팁

이것은 저자 자신의 답변 링크 이 질문이 부스트 메일 링리스트에 공식화되었을 때

저자 의견에서 비교 연산자 (! = 및 <)를 구현하면 변형 유형을 생성하는 데 사용되는 유형에 더 많은 요구 사항이 추가됩니다.

그래도 그의 관점에 동의하지 않습니다.

필요하지 않기 때문입니다.

부스트에는 있습니다 운영자 라이브러리 연산자를 정의합니다! = 연산자의 용어 ==

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top