Funktionszeiger in Klassen
-
Hallo,
ich habe eine Klasse "Panel" geschrieben, die auf Mausklicks reagiert. Die Reaktion besteht darin, das ein Funktionszeiger aufgerufen wird. Das sieht dann so aus:
typedef void (*event_function)(void); class Panel { //... protected: event_function OnClick; public: process_events(SDL_Event* event); set_OnClickEvent(event_function ef); //... }; Panel::process_events(SDL_Event* event) { //... this->OnClick(); }Das Problem besteht nun darin, dass ich in einer anderen Klasse nur static-Funktionen zuweisen kann:
class main_menue: public Panel { public: main_menue() { this->set_OnClickEvent((SDL::Interface::event_function)OnClick_Quit); } protected: static void OnClick_Quit(void); };Lasse ich das "static" weg kommt folgende Fehlermeldung:
"error C2440: 'Typumwandlung': 'overloaded-function' kann nicht in 'SDL::Interface::event_function' konvertiert werden"Ich will aber auf die Elemente von main_menue zugreifen können. Wie stelle ich das an?
-
Klassenmethoden werden in C++ anders behandelt and normale Funktionen. Ein Methodenzeiger sieht so aus:
struct MyClass { void tuewas(){ cout << "MyClass::tuewas()\n"; } }; int main() { // Methoden-Typ nimmt nur Funktionen von MyClass an. // Mit entsprechender Signatur natürlich typedef void (MyClass::*Func)(); MyClass obj; Func func = &MyClass::Func; // Hier die Zuweisung (obj.*func)(); // hier der Aufruf ... }Erstelle aber besser einen eigenen Funktor. Dieser Kapselt dann Funktionszeiger und Methodenzeiger.