Methoden in Template-Klasse spezialisieren
-
Hallo,
ich habe derzeit folgendes Problem für das ich gerade auf keine (schöne) Lösung komme: Ich möchte gerne eine Template-Klasse haben, die aus einer Vielzahl von Funktionen besteht, aber ich habe einen Datentyp, bei dem zwei Methoden spezialisiert werden müssen.
template< typename T > class Container { /* viele Methoden */ void method( T a, T b, T c ) { /* do something */ } };Ist T nun ein spezieller Datentyp, möchte ich method anders implementieren. Ich möchte nicht ableiten, da ich den Container für ein Template-Template benötige.
Kann mir jemand mit der Syntax auf die Sprünge helfen?
Vielen Dank!
-
template<typename T> class Container { public: void doit(); void method(T param); }; template< typename T> void Container<T>::doit() { std::cout << "doit for all" << std::endl; } template<typename T> void Container<T>::method(T param) { std::cout << "method for all" << std::endl; } template<> void Container<int>::method(int param) { std::cout << "method for int" << std::endl; }Ich hoffe das ist das was du suchst.
-
Hi,
Einfach
void Container<float>::method(float a, float b, float c) { // mach irgendwas },außerhalb der Klasse definieren.
Übrigens meinst Du statt Template-Klasse Klassentemplate. Template-Klasse wäre eine Spezialisierung davon.

-
cocacola88 schrieb:
Ich hoffe das ist das was du suchst.
Es sieht gut aus, es sieht so aus, als wäre es, was ich suche, es kompiliert und damit kann ich jetzt das Template-Template formulieren.
Ich gehe also mal davon aus, dass es dann funktionieren wird.

Vielen Dank für's Augen öffnen.

Eisflamme schrieb:
void Container<float>::method(float a, float b, float c) { // mach irgendwas },außerhalb der Klasse definieren.
Hab ich dann auch mal ausprobiert (Visual Studio 2005): Scheint nicht ganz so einfach zu sein und auf meinen Reisen durch Google wies mich auch mal darauf hin, dass man das 'template<>' lieber nicht vergessen sollte. ^^
Fehler 1 error C2511: 'void DkShrek::FluxValue<T>::startFloat(DkShrek::Degree,DkShrek::Degree,unsigned int)': Überladene Memberfunktion nicht in 'DkShrek::FluxValue<T>' gefunden k:\include\dkogl\fluxvalue.h 333Eisflamme schrieb:
Übrigens meinst Du statt Template-Klasse Klassentemplate. Template-Klasse wäre eine Spezialisierung davon.

Klingt sinnvoll. Aber zum Glück hat man mich ja doch verstanden

-
Okay. Ich weiß nicht, was standard ist, MVC2010 akzeptiert das jedenfalls
