Function Pointer To Member Problem
-
Hallo Forum!
Ich habe gerade das Problem eine Methode an einen Function Pointer zu übergeben:
class M { public : bool (*CollHandler)(Collision* CollisionPartner); }class FX { M* Model; FX(); bool CollHandler(Collision* CollisionPartner); } FX::FX() { Model->CollHandler= &FX::CollHandler; } bool FX::CollHandler(Collision* CollisionPartner) { }Leider schlägt Model->CollHandler= &FX::CollHandler; immer fehl:
error C2440: '=' : cannot convert from 'bool (__thiscall FX::* )(Collision *)' to 'bool (__cdecl *)(Collision *)'
Aber hier http://www.newty.de/fpt/fpt.html#assign wird
es doch eigentlich genauso gemacht?
-
laut der Fehlermeldung liegt das an unterschiedlichen calling conventions.
Ist eigendlich auch irgendwie logisch, dass das nicht geht, da du ja eine memberfunkiotn übergibst.
Für die muss der Kompiler noch einen weiteren Parameter erzeugen, nämlich das entsprechende Objekt.
wenn du aus bool FX::CollHandler eine statische memberfunktion machst, könnte es gehen.Allerdings sieht das was du vor hast, recht merkwürdich aus. Vielleicht solltest du dich mal mit dem Konzept und Anwendung von Functors (Funktionsobjekte) vertraut machen.
-
Nabend,
das geht nicht, weil jede Memberfunktion implizit den this-Zeiger mitfuehrt
und er daher nicht mit einem normalen Funktionszeiger kompatibel ist.Daher musst du dir einen Zeiger auf eine Memberfunktion erstellen:
class my_class { //... }; some_return_type (my_class::*member_fun)(int const&);Nun kann man 'member_fun' eine Memberfunktion der Klasse 'my_class' zuweisen,
welche selbstverstaendlich den Beschraenkungen des Rueckgabe-Parameters und
der Funktionssignatur genuegen muss.gruss
v R
-
ok danke habs jetzt mit nem static wrapper gelöst.