Template auf bestimmte Klassen einschränken
-
Hallo zusammen
Folgende Anwendung: Ich habe eine Template-Containerklasse, die verschiedene Objekte enthält. Diese können mit einer template Funktion der Form as<T>(T Objekt) in die Containerklasse eingefügt werden.
Nun würde ich gerne die Klassen, die eingefügt werden können auf die von einer Parentclass "Parent" abgeleiteten Kindklassen beschränken. Dies ohne, dass ich die Objekte in einem anderen Scope erstellen muss, um dann Pointer zu übergeben (mit welchen das Ganze ja kein Problem wäre).Die einzige Möglichkeit, die mir jetzt gerade in den Sinn kommt, wie ich den Compiler zum Meckern bringen kann wenn eine falsche Klasse verwendet wird, wäre eine künstliche Überprüfung innerhalb der template-Funktion à la:
template<class T> T& Containerclass::as( T Objekt ) { T* toTest=&Objekt; ParentClass* isClassDerived=static_cast<ParentClass*>(toTest); }Gibts noch ne andere Methode? Kann ich das Ganze noch etwas schöner aufbauen?
Merci und Gruess
-
Wieso bietest du Templates an, wenn du dann doch deren Nutzung einschränken willst? Dann wäre vielleicht eine normale Funktion eher etwas für dich?
-
SeppJ schrieb:
Wieso bietest du Templates an, wenn du dann doch deren Nutzung einschränken willst? Dann wäre vielleicht eine normale Funktion eher etwas für dich?
Nein. Ich hab im Programm eine (abstrakte) Klasse Parameter, die mir verschiedene benötigte Funktionen zur Verfügung stellt. Von dieser abgeleitet habe ich eigene Definitionen von Integer, Double, Boolean etc sowie weiteren etwas spezialisierteren Datentypen die diese Funktionen implementieren. Ich möchte gerne voraussetzen, dass alle Objekte innerhalb des Containers von der Klasse Parameter abgeleitet sind.
-
und http://www.boost.org/doc/libs/1_46_1/libs/utility/enable_if.html
sind auch beide Bestandteil von C++0x, die Loki-Bibliothek hat ähnliches (SUPERSUBCLASS und STATIC_CHECK)
-
pumuckl schrieb:
Schau mal:
(...)Das bringt mich weiter, merci!