Interface downcast
-
Weiss leider gar nicht, wie ich das Problem beschreiben soll. Das folgende Beispiel sollte es anschaulich beschreiben:
class IBase { virtual ~IBase(){} virtual void foo() = 0; } class IDerived : public IBase { virtual ~IDerived(){} virtual void foo2() = 0; } class Derived : public IDerived { ... } vector<IDerived*> v; IBase* ptr = new Derived(); v.push_back(ptr); // Konvertierung des Parameters 1 von 'IBase*' in 'IDerived* const&' nicht möglich
Liegt die Fehlermeldung am impliziten downcast, der dabei stattfindet?
-
warum nicht
vectro<IBase*>
?
-
Gedanke dabei war, mehrere Listen mit jeweils verschiedenen Interfaces. Somit können nur Klassen, die das jeweilige Interface implementieren der entsprechenden Liste zugeordnet werden. Hmmm
-
Das geht schon, du musst halt den Pointer zuerst in IDerived casten, bevor du ihn in den vector stecken kannst.
Verstehe nur grade nicht, wozu das gut sein soll.Also entweder direkt
IDerived* ptr = new Derived();
oder eben
IBase* ptr = new Derived(); IDerived* derived_ptr = dynamic_cast<IDerived*>(ptr); v.push_back(derived_ptr);
-
Ja danke, ich werde es direkt machen (IDerived* = ...). Es ging mir um eine Switchkonstruktion, so dass nicht jedes mal eine Zeigervariable des entsprechenden Interfaces verwendet werden muss.
Merci