std Mathefunktionen spezialisieren



  • Hi Leuts,

    was ist der korrekte Weg um die Mathefuntioen aus der std für eigene Typen zu spezialisieren?

    Was ich bisher mache ist folgendes:

    namespace std
    {
        my_t sin(my_t my)
        {
            ...
        }
    }
    

    Gibt es einen anderen, besseren Weg?

    MFG

    Martin



  • Überladen in std ist nicht erlaubt (Spezialisieren schon). Eine weitere Möglichkeit (so macht man es mit std::swap ):

    namespace MyLib
    {
    	BitFloat sin(BitFloat const& x)
    	{
    		// ...
    	}
    
    	template<typename T>
    	void f(T x)
    	{
    		using std::sin;
    		x = sin(x); // Wählt automatisch die passende sin-Funktion
    	}
    }
    


  • Martin Kalbfuß schrieb:

    Hi Leuts,

    was ist der korrekte Weg um die Mathefuntioen aus der std für eigene Typen zu spezialisieren?

    Gibt's keinen, neue Dinge zum namespace std hinzufügen ist verboten (einzige Ausnahme: Template Spezialisierungen). Wieso genau muss die Funktion im namespace std liegen? Einfach eine sin() Funktion in den namespace von deinem Typ packen ist sowieso die bessere Lösung (http://en.wikipedia.org/wiki/Argument-dependent_name_lookup)... 😉


Anmelden zum Antworten