template- argument -> geerbe klasse übergeben

Du bist neu in der Welt von C++? Dann schau hier herein!
Antworten
DBGTMaster
Beiträge: 190
Registriert: 19. August 2010 10:00

template- argument -> geerbe klasse übergeben

Beitrag von DBGTMaster »

Hallo,

nehmen wir an, wir haben Klasse B, welche von Klasse A geerbt hat.

Und wir haben folgende Methode:

Code: Alles auswählen

void run(class<A> b);
Ist nun folgender Aufruf möglich:?

Code: Alles auswählen

run(new class<B>);
Mein Kompiler meldet, dass der Aufruf nicht möglich ist und schlägt mir "void run(class<A> b);" vor??? Gibts eine andere möglichkeit?

Danke!
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: template- argument -> geerbe klasse übergeben

Beitrag von franzf »

DBGTMaster hat geschrieben:Ist nun folgender Aufruf möglich:?

Code: Alles auswählen

run(new class<B>);
Nein.
1) class ist ein Schlüsselwort in C++ und somit als Bezeichner unzulässig
2) run() erwartet ein Objekt by Value, mit dem new übergibst du hier einen Zeiger.

Wenn du das angepasst hast, bekommst du immer noch das Problem, dass eine template-Instanz MyClass<A> was komplett anderes ist als MyClass<B>, selbst wenn B von A abgeleitet wurde.
Gibts eine andere möglichkeit?
1) run() selber als template-Funktion anlegen
2) run() kein template übergeben, sondern eine Referenz auf A und dann Laufzeitpolymorphie einsetzen (vorausgesetzt, run soll nicht beliebige Typen aufnehmen können)

Es wäre nicht schlecht, etwas mehr über den Hintergrund deines Vorhabens zu erfahren, dann kann man auch konkrete Vorschläge geben. Was ist dieses template, das du run() übergeben willst? Was macht run()? Was machen A und B? Was wird modelliert? usw...
DBGTMaster
Beiträge: 190
Registriert: 19. August 2010 10:00

Re: template- argument -> geerbe klasse übergeben

Beitrag von DBGTMaster »

Hallo,

http://qtforum.de/forum/viewtopic.php?p=70346#p70346

Es geht hier immer noch um diéses Thema, bin bloß in letzter Zeit nicht dazu gekommen...

Mit dem Klassen- Template wollte ich mir einfach ersparen, für jede Aktion eine eigene Factory zu erstellen.

Code: Alles auswählen

new Factory<Aktionsname>();
So sollte mein Ziel sein, aber ich werd wohl lieber für jede Klasse ableiten, ich denk, wenn ich später mal in dll auslagere, werd ich eh nicht rundherum kommen..

lG
Antworten