Bin mit meiner Funktion unzufrieden



  • Hi,

    ich bin mit meiner Funktion etwas unzufrieden:

    template<typename T> inline const T factor (const T& value1, const T& value2, const T& area) 
    {
        const T result = static_cast<T>(1.0) - abs<T>(value2 - value1) / area;
    
        if(result < static_cast<T>(0.0)) 
            return (static_cast<T>(0.0));
        else if(result > static_cast<T>(1.0)) 
            return (static_cast<T>(1.0));
    
        return (result);
    }
    

    Funktionieren tut sie einwandfrei! aber hmn, ich weiß net! Ich glaube es gibt hier einige die das in 1 Zeile hinbekommen!

    Jemand paar Tipps?



  • Wenn da, wo das abs herkommt, noch ein min und max sind, dann

    template<typename T> inline const T factor (const T& value1, const T& value2, const T& area)
    {
        return min<T>(static_cast<T>(1.0), max<T>(static_cast<T>(0.0), static_cast<T>(1.0) - abs<T>(value2 - value1) / area));
    }
    


  • erstmal: da sind zuviele static_cast drin!

    template<typename T> inline const T factor (const T& value1, const T& value2, const T& area)
    {
        const T result = 1.0 - abs<T>(value2 - value1) / area;
    
        return std::min(std::max(0,result),1);
    }
    

    //edit dead war schneller *snief*



  • die static casts haben schon ihren sinn wenn man drüber nachdenkt!



  • ich glaube wenn dann würde T(...) mehr sinn machen.
    Man kann doch nicht einfach nen float zu irgendner klasse casten...

    oder man sagt halt, dass die funktion nur für int, float usw. gehen soll, dann brauchts auch den cast nicht.



  • wenn T die operatoren die hier verwendet werden nicht überladen hat, dann wird es für mathematische berechnungen eh nicht gebraucht werden können


Anmelden zum Antworten