2 Stimmen

Ungewöhnliches Verhalten bei Überladung mit Operator>=

Ich habe ein seltsames Verhalten mit einem Operator Überladen in C++. Ich habe eine Klasse, und ich muss prüfen, ob ihr Inhalt größer oder gleich einem langen Double ist. Ich habe den >=-Operator überladen, um diese Prüfung durchzuführen, meine Deklaration ist wie folgt:

bool MyClass::operator>=(long double value) const;

Ich muss sagen, dass ich auch einen cast-to-long-double-Operator für meine Klasse habe, der nur unter bestimmten Bedingungen ohne Ausnahmen funktioniert. Wenn ich nun diesen Operator verwende, beschwert sich der Compiler, dass es eine zweideutige Verwendung von operator>= gibt und die Alternativen sind:

  • Meine.
  • Die eingebaute operator>=(long double, int) .

Wie zwinge ich nun das Programm, meinen Operator zu verwenden?

0voto

Mr.Ree Punkte 8112
  • Der eingebaute Operator>=(long double, int).

Sieht so aus, als hätten Sie sich festgelegt:

bool class::operator>=(long double value) { return value >= classValue; }

Und Sie sind verschwunden:

bool class::operator>=(double value)      { return value >= classValue; }
bool class::operator>=(int value)         { return value >= classValue; }

Der Compiler kann also nicht entscheiden, in welche Richtung er konvertieren soll. (Es ist zweideutig.)

Vielleicht wäre eine Funktion (oder Methode) nach Vorlage hilfreich?

Achten Sie auf Situationen, in denen a>=b ruft andere Methoden auf als b>=a .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X