Methode einer abgeleiteten Klasse einem Methodenzeiger-Attribut der Grundklasse zuweisen
-
Wie kann man eine Methode einer abgeleiteten Klasse einem Methodenzeiger-Attribut der Grundklasse zuweisen?
Klartext:
class GK { public: void(GK::*mz)(); void set(p) { mz=p; } void call() { (this->*aktStatusFunktion)(); } }; class AK { public: void eine methode() { cout<<"Hallo"; } }; int main() { AK obj; obj.set(obj.methode); obj.call(); } //Das ist höchstwahrschienlich sowieso irgendwo falsch...Auf jeden Fall bekomme ich die Fehlermeldung, dass ich nicht
`void (AK::)()' in `void (GK::)()' zuweisen dürfe.
-
Sowas?
#include <iostream> class GK { public: void(GK::*mz)(); template<typename T> void set(void(T::*p)()) { mz=static_cast<void(GK::*)()>(p); } void call() { (this->*mz)(); } }; class AK : public GK { public: void eineMethode() { std::cout<<"Hallo"; } }; int main() { AK obj; obj.set(&AK::eineMethode); obj.call(); }
-
Helium schrieb:
Sowas?
#include <iostream> class GK { public: void(GK::*mz)(); template<typename T> void set(void(T::*p)()) { mz=static_cast<void(GK::*)()>(p); } void call() { (this->*mz)(); } }; class AK : public GK { public: void eineMethode() { std::cout<<"Hallo"; } }; int main() { AK obj; obj.set(&AK::eineMethode); obj.call(); }Sinnvoller und weniger fehleranfällig dürfte allerdings die Verwendung einer virtuellen Funktion sein. Dann spart man sich den Cast, indem man von vornherein die in der Basisklasse deklarierte Funktion für die Zuweisung benutzt.