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 mitstd::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)...