Welche rückgabe bei gleichen Variablen
-
Hallo com!
Wenn ich ein Funktionstemplate habe, die den größten wert zurückliefert
template<typename T> T compare(T a, T b){ if (a<b) return b; else if(b<a) return a; }wie mache ich das dann, dass auch eine Meldung kommt, dass die Variablen gleich sind?
Klar, ich könnte das machen:template<typename T> T compare(T a, T b){ if (a<b) return b; else //bedingung weg lassen return a; }aber dann weiß ich nicht 100%, dass a==b ist?
und die STL min-max Funktionstemplates besitzen auch keine zufriedenstellende Aussage darüber:template <class T> const T& max ( const T& a, const T& b ) { return (a<b)?b:a; // or: return comp(a,b)?b:a; for the comp version }Wie macht ihr das?
-
Normalerweise giben compare-Funktionen -1, 0, 1 zurueck (oder statt -1 und 1 irgendwelche negativen und positiven Werte).
Aber wenn du auch gleich das Maxiumum haben moechtest, kannst du das z.B. so machen:
template<typename T> bool compare( T a, T b, T& result ) { result = std::max( a, b ); return a == b; }Du kannst dann diese Funktion zum Beispiel wie folgt verwenden:
int main () { int a = 10; int b = 10; int c = 0; if ( compare( a, b, c ) ) cout << "Both are equal" << endl; else cout << "max = " << c << endl; }
-
Sehr schön!

Vielen dank icarus2!
-
Sinn?
Warum nicht gleich so:int a = 10; int b = 10; if(a == b) { cout << "Both are equal" << endl; } else { cout << "max = " << std::max(a,b) << endl; }Dann kannste auch die Art des Vergleichs immer an die Umstände anpassen, zum Beispiel für Floatingpoint-Typen.