Klassentemplates spezialisieren
-
Hallo,
Meine Template-Klasse
template <class T> MyClassfürT=MyClassanders aufgebaut werden, als fürT=MyOtherClass.
Und zwar soll eine Membervariable je nach Template-Parameter verschiedene Typen erhalten:template <class T> MyClass { // Standardmäßige Membervariable (also bei T=MyClass) int m_object; // Membervariable bei T=MyOtherClass std::list<int> m_object; };Lässt sich das mit C++ realisieren?
-
Ehm.. Du hast ja schon genannt, wie das geht. Mit Spezialisierung.

class MyOtherClass {}; template <class T> struct MyClass { int m_object; }; template <> struct MyClass<MyOtherClass> { std::list<int> m_object; };Hast du das Wort jetzt einfach so benutzt, oder kanntest du Spezialisierung doch schon?
Schau mal hier (oder besser in einem guten Buch):
http://de.wikipedia.org/wiki/Template_(Programmierung)#Spezialisierung
-
Äh...unter der Annahme, dass die Doppelbelegung von MyClass in deinem Beispiel ein Versehen ist - du beschreibst es einmal als Klasse und einmal als Klassenvorlage - klar.
class my_class { } class my_other_class { }; template<typename T> class my_class_template { // Hier ggf. für andere Typen implementieren }; template<> class my_class_template<my_class> { int m_object; }; template<> class my_class_template<my_other_class> { std::list<int> m_object; };
-
Danke

@drakon: Ich wusste das das bei Funktionen geht, aber nicht, wie das bei Klassen zu funktionieren hat.
-
Hehe. Ich habe das, wenn ich mich richtig erinnere damals zuerst bei Klassen gelernt und dann wurde gesagt, dass das auch bei Funktionen geht.

-
Bei Klassentemplates geht es sogar besser, weil sich diese auch partiell spezialisieren lassen (bei mehreren Templateparametern spezialisiert man nur einen Teil davon).
-
soll man das nicht auch bei fkt. im kommenden standard machen dürfen?