Template-Spezialisierungen
-
Hallo!
Ich zerbrech mir gerade den Kopf über diese merkwürdigen Template-Spezialisierungen und versteh's einfach nicht.
Ich habe eine Template-Klasse und möchte für den Fall, dass sie mit einem Zahlen-Typ instanziiert wird, ein paar zusätzliche Member-Funktionen bereitstellen.
Ich hätte jetzt auf
template<class T> class ClassA
und
template<> class ClassA<double> : public ClassA<double>
getippt, aber das ist offensichtlich falsch.
Vielen Dank für Eure Hilfe
Martin
-
Wie soll es denn aussehen, wenn eine Klasse von sich selbst erbt????????
-
<loriot>Ach!</loriot>
Deshalb schrieb ich ja auch was von "offensichtlich falsch". Leider komm ich immer noch nicht drauf, wie man's richtig macht.
-
Eigentlich recht einfach. Geh hin und schreibe in eine Funktion eine Zuweisung die nur bei den von dir gewünschten Typen funktioniert. Dann haut dir der Compiler das Template um die Ohren falls jemand einen unerlaubten Typ verwenden möchte.
-
Hallo,
eine Spezialisierung ist eine eigenständige Klasse, die keine direkte Beziehung zum Basistemplate hat. Wenn du gemeinsamen Code haben willst, dann verschiebe den doch einfach in eine gemeinsame Basisklasse:template <class T> class Common { public: // Methoden }; // Basistemplate template <class T> class ClassA : public Common<T> { public: // }; template <> class ClassA<double> : public Common<double> { public: // zusätzliche Methoden für double };
-
Vielen Dank! Das klappt alles wunderbar. Hätte ich auch selbst drauf kommen können, war jedoch von Bjarne Stroustrups
template<class T> class Vektor<T*> : private Vektor<void*> { /* ... */ };
zu sehr geblendet.
Danke für Eure Hilfe.