Spezialisierung von Template Funktionen in einer Template Klasse
-
Hallo zusammen,
ich verstehe warscheinlich noch nicht warum meine Implementierung Fehler verursacht, aber ich hoffe ich kann hier erleuchtet werden.
Folgendes Problem
template <class device_class> class Messages { template<typename T> void DefaultFormat(T nVarValue, CString& sVarValue); template <> void DefaultFormat<INT16>(INT16 nVarValue, CString& sVarValue) {...} //das geht template <> void DefaultFormat<UINT16>(UINT16 nVarValue, CString& sVarValue) {...} //das geht nicht }; //das geht auch template <class device_class> template <typename T> void Messages<device_class>::DefaultFormat(T nVarValue, CString& sVarValue) {...} //das geht dann nicht mehr C2768 + C2244 template <class device_class> template <> void Messages<device_class>::DefaultFormat<UINT16>(UINT16 nVarValue, CString& sVarValue) {...} //das geht dann nicht mehr C2768 + C2244 template <class device_class> template <> void Messages<device_class>::DefaultFormat<UINT32>(UINT32 nVarValue, CString& sVarValue) {...}Ich will die Spezialsierungen der Funktionen aber eigentlich nicht in der Klassendeklaration machen...
Compiler ist VC2003
MfG
Klaus
-
Ob das jetzt geht oder nicht, weiß ich gar nicht. Ich würde versuchen, Spezialisierungen von Funktionstemplates ganz sein zu lassen. Man kann das auch immer anders aufschreiben/designen (und das ist dann oft auch eleganter).
-
Bevor jemand auf das Problem eingeht: Gibt es einen Grund warum du keine Überladungen für UINT16 und UINT32 machst? Grundsätzlich sollten Überladungen Spezialisierungen vorgezogen werden.
-
Hallo zusammen,
ihr habt Recht ich brauche die Templates an der Stelle nicht.
Ich würde nur gern verstehen warum die Speialiserung außerhalb der Klassendefinition so nicht geht.die Varianten die auch außerhalb der Klassendeklaration funktionieren sind folgende:
template <class device_class> template <typename T> template <> template <typename T> template <> template <>was offensichtlich nicht geht ist:
template <class device_class> template <>die Spezialisierungen müssen immer von vorne beginnen?
Gruss
Klaus