Frage

Bei zwei identischen boost::variant Instanzen a und b , der Ausdruck ( a == b ) erlaubt ist.

Allerdings ( a != b ) scheint nicht definiert zu werden. Warum ist das?

War es hilfreich?

Lösung

Ich denke, es ist einfach nicht in die Bibliothek aufgenommen. Der Boost.Operators wird nicht wirklich helfen, weil entweder Variante von boost :: Operator :: equality_comparable abgeleitet worden wäre. David Pierre ist richtig zu sagen, Sie verwenden können, aber Ihre Antwort ist auch richtig, dass der neue Betreiber! = Nicht von ADL gefunden werden, so dass Sie einen mit dem Operator benötigen.

Ich würde bitten, dies auf der Boost-Benutzer-Mailingliste.

Bearbeiten von @ AFoglia Kommentar:

Sieben Monate später, und ich studiere Boost.Variant, und ich stolpere über diese bessere Erklärung der Auslassung Listen.

http://boost.org/Archives/boost/2006/06/ 105895.php

operator== ruft operator== für die aktuelle Klasse zur Zeit in der Variante. Ebenso ruft operator!= sollte auch operator!= der Klasse aufrufen. (Denn theoretisch kann eine Klasse definiert werden, so a!=b nicht das gleiche wie !(a==b) ist.) Also, dass eine weitere Anforderung hinzufügen würde, dass die Klassen in der Variante eine operator!= haben. (Es gibt eine Debatte darüber, ob man diese Annahme in der Mailing-Liste Thread machen kann.)

Andere Tipps

Dies ist einen Link auf die Antwort vom Autor selbst , wenn diese Frage auf Boost-Mailingliste formuliert wurde

Fasst es, in der Autor Meinung, Vergleichsoperator Umsetzung (! = Und <) würde mehr Anforderungen an den Typen hinzufügen verwendet, um den Variantentyp zu erstellen.

ich mit seiner Sicht nicht jedoch zustimmen, da! = Kann auf die gleiche Art und Weise wie == implementiert werden, ohne notwendigerweise die möglichen Implementierungen dieser Operatoren versteckt für jede der verschiedenen Arten der Variante bilden

Weil es nicht nötig ist.

-Boost hat eine Bibliothek Operatoren, die definiert operator! = in der Bezeichnung des Operators ==

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top