Ich habe eine Klasse namens uniVal mit definierter Konvertierung in int_64 double und string. Wenn ich versuche, Objekt dieser Klasse zu vergleichen GCC sagt int: Kandidaten sind:C++ - Operator == und benutzerdefinierte Typumwandlungen
operator==(int, int) <built-in>
operator==(int64_t {aka long int}, int) <built-in>
operator==(unsigned int, int) <built-in>
operator==(long unsigned int, int) <built-in>
operator==(float, int) <built-in>
operator==(double, int) <built-in>
error: ambiguous overload for ‘operator==’ (operand types are ‘uniVal’ and ‘int’)
aber wenn ich doppelt zu werfen angeben werden explizit kompiliert. Ist es möglich, dass gcc den Konvertierungstyp wählt, der dem anderen Argumenttyp am nächsten kommt?
UPD: Schreiben eigenen Operators == für jede Typkombination wird, natürlich, dies zu lösen, aber ich möchte diese Klasse mit allen C++ - Typen arbeiten, also möchte ich nur eine Reihe von Konvertierungsfunktionen schreiben und machen Complier mache den Rest.
Wenn Sie Ihren eigenen 'operator == (uniVal, int)' und 'operator == (int, uniVal)' geschrieben haben, sollte das Problem lösen – Justin