Funktionspointer bei verschiedenen Klassen
-
Hallo,
ich versuche mich gerade mit http://www.newty.de/fpt/index.html in Funktionspointer einzuarbeiten und ohne Klassen ist das auch noch schön einfach.
Nun stehe ich aber vor dem Problem, was ich machen muss, wenn ich zwei verschiedene Klassen A und B habe, die die gleiche Unterklasse Sub haben, welche wiederum eine Funktion MachWas() enthält, die eine Funktion bar() des jeweiligen Besitzers aufrufen soll.Also etwa so:
class Sub{ void foo( void(*fkt)() ); }; class A{ Sub sub; void foo(); void bar(); }; class B{ Sub sub; void foo(); void bar(); }; void Sub::MachWas( void (*fkt)() ){ fkt(); } void A::foo(){ sub.MachWas( &A::bar() ); } void B::foo(){ sub.MachWas( &B::bar() ); }
Wenn ich die Fehlermeldung von g++ richtig verstehe, ist void() etwas anderes als z.B. void A::(), d.h. ich müßte in die Parameterliste von MachWas() noch einbauen, aus welcher Klasse, bzw. von welchem Objekt der Aufruf kommt. Könnte mir jemand dazu bitte einen Rat geben?
Fehlermeldung von g++ schrieb:
test.cpp:23: error: no matching function for call to 'Sub::MachWas(int, void (A::) (int))
test.cpp:18: note: candidates are: int Sub::MachWas(int, void () (int))Viele Grüße, Chris
-
Ähm, sorry, Sub sieht natürlich so aus
class Sub{ void MachWas( void(*fkt)() ); };
-
Memberfunktions-Zeiger sind leider ein wenig schwieriger als einfache Funktionszeiger. Ich empfehle die boost-Bibliothek und daraus
boost::function
edit: http://www.boost.org/doc/libs/1_38_0/doc/html/function/tutorial.html#id3171589