JustAnotherNoob schrieb:
Aber das heißt dann doch auch, dass wenn ich die Vergleichsoperatoren für boost.any implementiere ich immer einen solchen Fehler bekomme, wenn ich Vergleichsoperatoren für egal welchen Typ aufrufe, der keine Vergleichsoperatoren implementiert hat, oder?
Ehm, also wenn ich deine Frage richtig verstanden habe, was ich eigentlich glaube, aber halt nicht ganz sicher bin, da es wohl ein fehlendes Komma hat, was zwar nicht weiter schlimm ist, durchaus aber beim Verständnis stören kann, dann denke ich, bzw. bin eigentlich davon überzeugt, dass die Antwort, auf deine oben gestellte Frage, JA lautet.
*SCNR*
JustAnotherNoob schrieb:
Das ist natürlich unerwünscht, kann ich da irgendwas dran ändern? (vermutlich nicht, also redesign..)
Boost.Any umschreiben, bzw. den Konstruktor explicit machen.
Ansonsten fällt mir nicht sehr viel sinnvolles ein. Du könntest natürlich eine Comparison Klasse machen, welche im Konstruktor die beiden Vergleichsobjekte erwartet. Den Konstruktor von dieser Klasse machst du explicit und gibst der Klasse Methoden für die Vergleiche. Ich gebe am besten einen kurzen Quellcode an, aber ich empfinde das nicht als saubere Lösung
class Comparison
{
private:
boost::any const& m_lhs;
boost::any const& m_rhs;
public:
explicit Comparison(boost::any const& lhs, boost::any const& rhs)
: m_lhs(lhs)
, m_rhs(rhs)
{ }
// Wobei eigentlich das explicit durch die Trennung von den Operatoren,
// gar nicht mehr nötig wäre ...
public:
bool is_equal() { /* ... */ }
bool is_equal_or_greater() { /* ... */ }
// ... usw
};
... ich finde es sogar äusserst hässlich
Grüssli