Template Spezialisierung => HILFE!
-
Hallo Forum,
ich kämpfe gerade mit Templates und habe per Google und Co nicht wirklich verständliche Hilfe finden können.
Mal ganz einfach gefragt: wie müsste folgender Code geändert werden, dass er kompiliert (Compiler=MSVC2005) ?template<class T> class X { public: X(){;}; void Test( T & i ) // soll für double, int... immer gleich sein { cout << i << endl; }; void doOUT( T & i ); // soll für double, int... unterschiedlich implementiert werden }; template <typename T> void X<int>::doOUT( T & i ) { cout << 2*i << endl; }; template <typename T> void X<double>::doOUT( T & i ) { cout << 3.0*i << endl; };grübel,grübel...
-
Hi!
Ich denke es müsste so gehen:
template <> void X<int>::doOUT( int & i ) { cout << 2*i << endl; } template <> void X<double>::doOUT( double & i ) { cout << 3.0*i << endl; }KaPtainCugel
-
Z.B: so:
template <typename T> class X { public: X () {} void Test (T& i) { cout << i << endl; } void doOUT (T& i); }; template <> void X <int>::doOUT (int& i) { cout << 2 * i << endl; } template <> void X <double>::doOUT (double& i) { cout << 3.0 * i << endl; }Aach, schon wieder zu spät

-
danke!!!!

die Funktion doOUT funktioniert jetzt, aber: jetzt noch ein Level schwieriger, vgl. Funktion doOUT2.
template<class T> class X { public: X(){;}; void Test( T & i ) // soll für double, int... immer gleich sein { cout << i << endl; }; void doOUT( T & i ); // soll für double, int... unterschiedlich implementiert werden template< class Y > void doOUT2( Y & r, T & i ); // soll für double, int... unterschiedlich implementiert werden }; template <> void X<int>::doOUT( int & i ) { cout << 2*i << endl; } template <> void X<double>::doOUT( double & i ) { cout << 3.0*i << endl; } template <class Y> void X<int>::doOUT2( Y&r, int & i ) { cout << 2*i << endl; } template <class Y> void X<double>::doOUT2( Y&r, double & i ) { cout << 3.0*i << endl; }Der Compiler bricht jetzt mit der Fehlermeldung
error C2244: 'X<T>::doOUT2': Keine Übereinstimmung für Funktionsdefinition mit vorhandener Deklaration gefunden
ab.
Kann man mit Templates so weit gehen?

Danke nochmals...

-
Sollte so gehen (zumindest kompiliert es der BCB):
template <> template <typename Y> void X <int>::doOUT2 <Y> (Y& r, int& i) { cout << 2 * i << endl; } template <> template <typename Y> void X <double>::doOUT2 <Y> (Y& r, double& i) { cout << 3.0 * i << endl; }
-
Supi, vielen Dank.
Der MSVC2005 akzeptiert scheinbar nur eine leicht geänderte Syntax:
template <> template <typename Y> void X <int>::doOUT2 (Y& r, int& i) { cout ... } template <> template <typename Y> void X <double>::doOUT2 (Y& r, double& i) { cout ... }d.h. das
<Y>
mag MSVC2005 nicht ...
Also nochmals vielen Dank, jetzt habe ich keine Fragen mehr!

-
atlastraeger schrieb:
d.h. das
<Y>
mag MSVC2005 nicht ...
Das gehört dort auch nicht hin. Scheinbar ein Fehler beim BCB.