Ich habe zwei Klassen, Base
und Derived
. Ich habe einen Container, der eine Liste von Derived*
Zeigern speichert.Wie kann ich Base * gegen eine Liste von Derived * innerhalb von Base destructor anpassen?
Es ist ein Signal/Schlitz-Mechanismus, der ein Signal aussendet, wenn ein Basisobjekt zerstört wird, und an diesem Punkt sind wir in ~Base
destructor, so RTTI für Base*
zu Derived*
Umwandlung nicht verfügbar ist (dieses Qt verwendet, aber die Frage ist nicht Qt spezifisch)
Dieses Signal ist mit einem Steckplatz verbunden, der den Pointer-Container verwaltet. Wie Sie vielleicht erraten haben, möchte ich überprüfen, ob der Zeiger Base*
, dessen Objekt zerstört wird, einem im Container gespeicherten Zeiger Derived*
entspricht, und wenn ja, entfernen Sie ihn aus dem Container.
Ich weiß, dass es viele alternative Designs gibt, wie zum Beispiel das Signal QObject::destroyed()
nicht verwenden oder eine Liste von QObject*
statt Derived*
speichern. Aber ich möchte das aus vielen praktischen Gründen verwenden.
Das bedeutet, ich möchte einen Basiszeiger auf einen abgeleiteten Zeiger, nicht zur Dereferenzierung, sondern zum Aufspüren des Zeigers konvertieren, und ich will, dass es definiert wird, was auch immer der Unterklassenbaum ist (einschließlich Mehrfachvererbung, virtuelle Funktionen). ..).
Kann ich static_cast dafür verwenden?
Danke!
Oops - Dank für bemerken – galinette
Nun können Sie eine 'static_cast' verwenden, aber Sie müssen sein sicher, den richtigen Typ zu haben. –
@DavidHaim: Wie gesagt, ich weiß, es gibt andere mögliche Designs, aber die Frage ist hier spezifisch. Ich kann die Base-Klasse hier nicht ändern (das ist die QObject Qt-Basisklasse) – galinette