So registrieren Sie einen abgeleiteten Klassenelementfunktionszeiger mit einer Basisklasse

8

Im Gegensatz zu virtuellen Memberfunktionen benötige ich eine Lösung, bei der eine Funktion, die bei jeder Ableitung der Ebenenklasse implementiert ist, für einen späteren Aufruf durch die Basisklasse registriert werden kann. (Nicht nur die am weitesten abgeleitete Implementierung)

Um dies zu tun, habe ich darüber nachgedacht, Mechanismen für abgeleitete Klassen zur Verfügung zu stellen, um ihre Funktion bei der Basisklasse zu registrieren, etwa während des abgeleiteten Klassenkonstruktors.

Ich habe jedoch Probleme mit dem Memberfunktionszeigerargument. Ich dachte, dass Derived von Base abgeleitet ist, der this -Zeiger sollte automatisch gecastet werden.

Kann dies in der Nähe von dem gemacht werden, was ich versuche oder brauche ich die statischen Memberfunktionen void * und static_cast ?

%Vor%

Compilerfehler:

%Vor%     
NoahR 08.04.2012, 21:34
quelle

2 Antworten

12

Wenn alles, was Sie brauchen, die Fehlermeldung ist, dann wird Casting tun:

%Vor%

Nennen Sie es normalerweise mit einem Base* p ( sofern es auf einen abgeleiteten verweist): (p->*registered)(0)

Siehe Ссылка für ein funktionierendes Beispiel.

    
jpalecek 08.04.2012, 21:56
quelle
0

Dies ist nicht erlaubt mit oop. Verhaltensumschaltung wird erreicht, indem die Klasse des Objekts zum Zeitpunkt der Objekterstellung polymorph gemacht wird.

Wenn Sie nach dem Erstellen von Objekten ein Verhaltenswechsel durchführen müssen, können Sie das dynamische Verhalten auf eine andere Gruppe polymorpher Klassen umstellen und einen "Zeiger" auf eine Instanz einer Klasse mit dem richtigen Verhalten halten. Bitte Google das "dekorierte Klasse" Software-Muster.

    
scorpdaddy 08.04.2012 21:54
quelle

Tags und Links