Funktionszeiger auf nicht statische Memberfunktionen
-
Hallo,
kann mir jemand sagen, wie ich nen Funktionspointer deklariere muss, damit ich ihn auf ne Memberfunktion zeigen lassen kann? Wenn ich schreibebool (*)(int,int) = &this->compare;
Kann erdas nciht machen, weil er mir sagt, dass ich doch bitte keine Memberfunktionen zuweisen soll.
-
-
Hm, ich bekomm das noch ned so ganz hin, ich weiß icht so ganz wie ich die funktion aufrufen soll, hab das ganze in ne map gepackt, ich poste das mal ausschnittsweise, vielleciht kann mir jemadn sagen wo der fehler liegt. der compiler meckert in der angegebenen zeile.
class A { ... std::map<std::string,bool (Object::*)(Object*,const std::string&)> functions; ... } ... ... bool A::foo(const std::string &name, bool (Object::*function)(Object*,const std::string&)) { functions["name"]=function; return true; } ... ... void A::bar(const std::string &what) { this->*functions[what](this,what); // Genau hier sagt der Compiler das es ned geht! }
Die genaue Fehlermeldung lautet:
error: must use .* or ->* to call pointer-to-member function in `(this + 56)->std::map<_Key, _Tp, _Compare, _Alloc>::operator[] [with _Key = std::string, _Tp = bool (matama::Object::*)(matama::Object*, const std::string&), _Compare = std::less<std::string>, _Alloc = std::allocator<std::pair<const std::string, bool (matama::Object::*)(matama::Object*, const std::string&)> >]((+what)) (...)'
-
[cpp]
(this->*functions[what])(this,what);
[/cpp]
-
Danke, dass war schonmal sehr Hilfreich, aber nen kleines Problem hab ich immernoch...
void A::Init() { foo(std::string("getwet"),&matama::Food::getwet); // Hier hängt es mal wieder... } bool A::getwet(Object *obj,const std::string &str) { ... ... }
Kann mir da nochmal wer helfen? Danke!
-
also ich würd das so machen
du hast die klasseX
jetzt musst du ja einen Fkt zeiger auf statische memberfkt zuweisen ( z.b. MyFunktion() ). Das willst du ja nicht machen, da du die m_Variablen auch statisch machen müsstest. Also musst du einen kleinen Trick anwendenDu machst eine statische Memberfkt die ein fkt.Zeiger auf deine Fkt ( MyFunktion() ) ist. Jetzt kannst du in der anderen klasse z.b. dann auf die statische einen funktionszeiger machen.
Also
KlasseX
1. Deine FktZ()
2. Deine Callback Funtkion FktCallback() ( statisch )die statische ruft die FktZ auf.
in der anderen klasse ruft ( Fktzeiger ) ruft die FktCallback auf. Darfs ja, da statisch
und die ruft gleich die nicht statische auf.
-
Sorry, aber deine Aussage hab ich nciht so ganz verstanden, aber ich hab mein problem auch selber schon lösen kommen, hab einfach nen typcast gemacht, war nen problem mit abgeleiteten klassen.
Vielen Dank an die Helfer!