2011-01-03 7 views
2

boost::variant 유형의 두 변수를 비교해야하며 동등성을 위해 variant 내부의 값을 비교하고 싶습니다.부스트 변형 비교기

이것을 구현하는 가장 좋은 방법은 무엇입니까?

내 변형은 다음과 같습니다

typedef boost::variant<int, float, double, long, bool, std::string, boost::posix_time::ptime> variant; 
+0

정말이 변형이 필요한가요? – ybungalobill

+0

예이 변형이 필요합니다 ... –

답변

8

variant docs에서 :

EqualityComparable로 : 변형 자체가 EqualityComparable로하는 경우와 그 경계 유형의 모든 사람이 개념의 요구 사항을 충족하는 경우에만 가능합니다.

그래서 variant은 모든 유형이 비교 가능한 경우 이미 동일성을 구현합니다. 그래서 귀하의 경우에는 == 연산자를 사용할 수 있어야합니다.

일반적으로 인수 중 하나에 대한 참조를 묶고 방문자를 두 번째 인수에 적용하는 단일 방문자를 만들어 이진 방문자를 구현할 수 있습니다.

+0

'=='잘 작동하고, 왜 다시 발명해야합니까? – Nim

+1

이것은 실제 문제는 아니지만 부스트 1.45 및 VC100 "=="이 작동하지만 "! ="가 작동하지 않으면 컴파일러 오류가 발생합니다 ("연산자를 찾을 수 없습니다 ..."). –