Funktionspointer
-
Vielleicht sitze ich auch gerade auf dem Schlauch aber wie deklariert man eine Funktion die ein Funktionspointer auf eine Funktion mit der gleichen Signature zurückgibt?
-
Mit typedef geht es so:
int blah() { cout << "\nblah"; return 0; } typedef int (*func_ptr)(); func_ptr blub() { return &blah; } int main() { int (*ptr)() = blub(); (*ptr)(); return 0; }Oder hab ich dich falsch verstanden?
Ansonsten: Wie es ohne typedef geht, würde mich auch interessieren.
Caipi
-
Ben04 schrieb:
Vielleicht sitze ich auch gerade auf dem Schlauch aber wie deklariert man eine Funktion die ein Funktionspointer auf eine Funktion mit der gleichen Signature zurückgibt?
Direkt gar nicht, da eine solche Typdeklaration rekursiv wäre.
Wie immer hilft aber die sprichwörtliche Indirektion[1]:
class FuncPtrHelper; typedef FuncPtrHelper (*FuncPtr)(); class FuncPtrHelper { public: FuncPtrHelper(FuncPtr p) : p_(p) {} operator FuncPtr() {return p_;} private: FuncPtr p_; }; FuncPtrHelper f() { return f; } int main() { FuncPtr p = f(); p(); }[1] siehe Herb Sutter: "More Exceptional C++" - Item 32
-
Caipi schrieb:
Oder hab ich dich falsch verstanden?
Hast du denn die Funktion hat eine andere Signature als der zurückgegebene Pointer.
@Hume danke für deine Antwort