Dieses Verhalten wird RTTI (Run time type information) genannt. Diese Technik ist am besten zu vermeiden, kann aber in manchen Situationen nützlich sein.
Es gibt zwei große Möglichkeiten, dies zu lösen. Die erste Möglichkeit besteht darin, eine Schnittstelle mit einer rein virtuellen Funktion zu schreiben, die einen klassenspezifischen Ganzzahlreferenzcode zurückgibt. Dieser Code kann dann verwendet werden, um einen bestimmten Typ darzustellen. Diese Ganzzahlen könnten in einer bestimmten Aufzählung gespeichert werden.
In abgeleiteten Klassen können Sie dann die Methode überschreiben und diesen klassenspezifischen Typ zurückgeben. Während der Laufzeit können Sie dann beispielsweise Plugin-> getType() aufrufen, und es wird seinen spezifischen Typ zurückgegeben. Sie können dann einen static_cast für den Zeiger ausführen, um den richtigen Zeiger des abgeleiteten Typs zurück zu erhalten.
Die zweite Möglichkeit besteht darin, entweder typeid zu verwenden, um den Klassentyp des Objekts zu erhalten; aber das ist compilerabhängig. Sie können auch versuchen, den Zeiger mithilfe von dynamic_cast zu werfen. dynamic_cast gibt einen Nullzeiger zurück, wenn er in den falschen Typ umgewandelt wird. und eine gültige, wenn sie in einen korrekten Typ umgewandelt wird. Die dynamische Cast-Methode hat einen größeren Overhead als die oben beschriebene getType-Methode.
Was ist mit dem zweiten Teil meiner Frage. Für mich ist es das Schwierigste und ein Problem, dem ich immer wieder gegenüberstehe. Würde sehr geschätzt, wenn jemand mich in die richtige Richtung zeigen könnte. –