Ich muss Vorlage als Funktionsargument übergeben, aber Vorlage muss alle geerbten Objekte akzeptieren.C++ - Vererbung im Template-Parameter
Zum Beispiel:
template <class T>
class Template {
public:
Template() {}
};
// IMPORTANT: must accept all children of "Base"
class Test {
Template<Base> *pointer;
public:
Test(Template<Base> *pointer) {...}
};
main() {
Template<Base> *base = new Template<Base>();
Template<Child1> *child = new Template<Child1>();
Test *test1 = new Test(base); // WORKING
// NEXT LINE IS IMPORTANT:
Test *test2 = new Test(child); // ERROR: no matching function for call to 'Test::Test(Template<Child1>*&)'
}
class Base {...};
class Child1 : public Base {...};
class Child2 : public Base {...};
..
Ich brauche die effektivste Art und Weise, wie Vorlage speichern in „Test“ Klasse, dass alle Kinder Klassen akzeptieren. Ich habe viele Kinderklassen.
1) Ist es möglich, einige Casting (static_cast) für Child-Klasse in Argument zu machen? Es wird gut sein, es innerhalb von "Vorlage" oder innerhalb der "Test" -Klasse zu verwenden. Nicht, wenn ein neues "Test" -Objekt erstellt wird, da es viele neue Objekte geben wird.
2) Oder übergeben Argument ohne Vorlage Argument Test(Template *pointer) {...}
?
Oder wie man es löst?
'Vorlage' ist völlig unabhängig von 'Template '. Sie sind völlig verschiedene Klassen. Je nachdem, was Sie tun möchten, ist die Option "Löschen" möglicherweise eine sinnvolle Option. –
Cornstalks
Gibt es etwas, das Sie daran hindert, eine Basisklasse (nicht Vorlagenvorlage) zu Vorlage zu haben und diese stattdessen in Ihrer Testklasse zu speichern? –
coyotte508
@ coyotte508: Ja, akzeptable Lösung, aber ich würde gerne wissen, ob es eine direkte Lösung für die Vererbung von Template-Parametern gibt. – Nick