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.


Anmelden zum Antworten