Template Klassen und Template Friends?
-
Hallo Leute!
Ich hab' da ein kleines Problem, mit dem ich nicht weiter komme. Ich versuche gerade eine Klasse zu schreiben, die sich wie ein normaler float oder int handhaben laesst, jedoch bei Neuzuweisungen den alten Wert weich in den neuen Wert ueberblendet. - Mit jeder Interaktion (operatoren) sollen die Werte einen Schritt weiter uebergeblendet werden.
Um die Klasse fuer alle C++-Datentypen verwenden zu koennen, soll die Klasse ein Template sein und um nicht alle Operatoren fuer alle Datentypen zig-mal zu ueberladen, wollte ich diese auch als template ueberladen.
Aber dabei ergibt sich folgendes Problem, ich weiss nicht, wie ich die friend-funktionen deklarieren / definieren muss. ???
Und die restlichen Operatoren wuerde ich auch gerne ausserhalb der Klassen-Definition definieren, aber wie?
template<class T> template<class U> ... ???
Momentan meint der Compiler (MSVC), dass der << operator keinen zugriff auf private-Member hat... (C2248)
(Den wollte ich als Template haben, um ihn nicht fuer jedes der stream-Objekte extra zu definieren.)Dann schonmal danke fuer die hoffentlich zahlreichen Antworten
bis denn dann
Sven//--------------------------------------------------------------------// #ifndef CFADINGPARAMETER_H_INCLUDED #define CFADINGPARAMETER_H_INCLUDED //--------------------------------------------------------------------// //--------------------------------------------------------------------// template<class T=float> class CFadingParameter; //--------------------------------------------------------------------// //--------------------------------------------------------------------// template<class T> class CFadingParameter { public: CFadingParameter(T tValue = static_cast<T>(0), int iFadeType = kFadeLin , int iFadeDist = 1024 ); ~CFadingParameter(void); void update(void); template<class U> CFadingParameter<T> &operator =(U uRight) { m_tValueNew = uRight; m_iFadeLeft = m_iFadeDist; update(); return *this; } template<class U> CFadingParameter<T> &operator+=(U uRight) { m_tValueNew += uRight; m_iFadeLeft = m_iFadeDist; update(); return *this; } template<class U> friend U &operator<<(U &uLeft, CFadingParameter<T> tRight); private: T m_tValueCur; T m_tValueNew; int m_iFadeLeft; int m_iFadeDist; int m_iFadeType; }; //--------------------------------------------------------------------// //--------------------------------------------------------------------// //--------------------------------------------------------------------// template<class U, class T> U &operator<<(U &uLeft, CFadingParameter<T> tRight) { tRight.update(); return (uLeft << tRight.m_tValueCur); } //--------------------------------------------------------------------// //--------------------------------------------------------------------// #endif // end of: #ifndef CFADINGPARAMETER_H_INCLUDED //--------------------------------------------------------------------//