Wechselseitig abhängige template functions
-
Hallo,
ich habe eine Klasse mit zwei template member functions, die sich gegenseitig aufrufen. Nun möchte ich die beiden template functions spezialisieren. Doch egal welche Reihenfolge ich wähle, ich erhalte den Compiler Fehler 'specialization of <Funktionsname> after instantiation (was ja auch stimmt). Der Code ist etwa folgender:class A { template<typename T> static T f(T x); template<typename T> static T g(T x); }; template<> double A::f<double>(double x) { if (some condition) { return g(x); } else return 1; } template<> double A::g<double>(double x) { if (some condition) { return f(x); } else return 1; }Wie kann ich das Problem umgehen?
Vielen Dank und viele Grüße,
Peter
-
Wie immer im Falle von Kreuzabhängigkeiten mit einer Vorwärtsdeklaration:
template<> double A::g<double>(double x);
-
peter_h schrieb:
Nun möchte ich die beiden template functions spezialisieren.
Ist das wirklich das, was du willst? In den allermeisten Fällen ist eine überladung mit einer entsprechenden nicht-template-Funktion sinnvoller.
-
Danke an SeppJ, das hat funktioniert. War eigentlich naheliegend, aber die genaue Form hatte ich trotzdem nicht allein hinbekommen.
pumuckl schrieb:
Ist das wirklich das, was du willst? In den allermeisten Fällen ist eine überladung mit einer entsprechenden nicht-template-Funktion sinnvoller.
Tatsächlich finde ich die Template-Lösung recht nützlich. Was wäre denn der Vorteil wenn man mit nicht-Templates überlädt?
-