2011-01-03 10 views
2

Ich muss zwei Variablen des Typs boost::variant vergleichen und ich möchte die Werte innerhalb der Variante für die Gleichheit zu vergleichen.Boost-Variante Komparator

Was wäre der beste Weg, dies zu implementieren?

Meine Variante sieht wie folgt aus:

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

Sind Sie sicher, dass Sie * wirklich * diese Variante brauchen? – ybungalobill

+0

Ja, ich brauche diese Variante ... –

Antwort

8

Von variant docs:

EqualityComparable: Variante ist selbst EqualityComparable, wenn und nur wenn jeder seiner begrenzten Typen, um die Anforderungen des Konzepts erfüllt.

So implementiert variant bereits Gleichheit, wenn alle Typen vergleichbar sind. In diesem Fall sollten Sie einfach den Operator == verwenden können.

Im Allgemeinen können Sie einen binären Besucher implementieren, indem Sie einen unären Besucher erstellen, der einen Verweis auf eines der Argumente enthält und den Besucher auf das zweite Argument anwendet.

+0

'==' funktioniert gut, warum die Mühe, es neu zu erfinden? – Nim

+1

Obwohl dies kein wirkliches Problem ist, funktioniert mit Boost 1.45 und VC100 "==" funktioniert aber "! =" Funktioniert nicht ein Compilerfehler ("no operator found ..."). –