Funktionspointer zurückgeben
-
Hallo,
ich möchte einen Funktionspointer zurück geben, aber nicht als Rückgabeparameter sondern indem ich einen "leeren" Funktionspointer übergebe und in der Funktion dann beschreibe.So hatte ich mir das vorgestellt, aber es funktioniert nicht.
Es lässt sich zwar kompilieren und linken, aber wenn ich den Funkionspointer dann in der main aufrufe kommt eine Fehlermeldung weil der Pointer ungültig ist.
Er wird nicht korrekt in der Funktion getFunction beschrieben.class myClass { public: // Define the type func as a pointer to a void member function // in this class with no parameters typedef void (myClass::*func)(); bool getFunction(func p); void Test(); }; bool myClass::getFunction(myClass::func p) { p = &myClass::Test; return true; } void myClass::Test() { printf("nada1\n"); } int main() { myClass c; myClass::func p; c.getFunction(p); (c.*p)(); // Or using a pointer: myClass *cp = &c; cp->getFunction(p); (cp->*p)(); }
-
Habs gelöst.
class myClass { public: // Define the type func as a pointer to a void member function // in this class with no parameters typedef void (myClass::*func)(); bool getFunction(func* p); void Test(); }; bool myClass::getFunction(func* p) { *p = &myClass::Test; return true; } void myClass::Test() { printf("nada1\n"); } int main() { myClass c; myClass::func p; c.getFunction(&p); (c.*p)(); // Or using a pointer: myClass *cp = &c; cp->getFunction(p); (cp->*p)(); }
-
Das ist nicht so ganz trivial...
Siehe dazu auch:
http://www.codeproject.com/Articles/7150/Member-Function-Pointers-and-the-Fastest-PossibleAm einfachsten und sichersten geht es in C++ (nur) via templates!
Oder verwende einfach boost.function!
-
Dieser Thread wurde von Moderator/in Jochen Kalmbach aus dem Forum WinAPI in das Forum C++ (auch C++0x und C++11) verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.