Einer Funktion eine Funktion übergeben ?
-
Hallo, ist es möglich einer Funktion als Übergabetyp einen Zeger auf eine Funktion zu übergeben, und diese dann in dieser Funktion aufzurufen ?
Danke schonmal
Gruß Chris
-
-
Ja - die Lösung heißt "Funktionszeiger":
void execute(double(*func)(double)) { for(int i=0;i<360;++i) cout<<func(i*3.14/180); } excucute(tan);
-
Hmm, und wie kann man einen Zeiger auf eine Funktion zurückgeben ?
etwa so ?void (*FunctionPointer)(int) CALLERFUNC(void (*FunctionPointer)(int), int p) { return FunctionPointer; }Und wie kann ich diesen zurückgegebenen Pointer wiederum in einem Zeiger speichern?
-
Per Zuweisung
void (*ptr)(int) = CALLERFUNC(f,irgendwas);
-
hmm, ok das klappt, aber mein code von grade wahr falsch, wie kann ich eine Funktion deklarieren, die als Rückgabe tyü einen Pointer auf eine Funktion hat ?
void (*FunctionPointer)(int) CALLERFUNC(void (*FunctionPointer)(int), int p) { return FunctionPointer; }das geht, da meckert der compiler, das CALLERFUNC undeclared ist...
GRuß Chris
-
Vermutlich stimmt die Klammerung nicht (wie das genau aussehen muß, bin ich auch nicht sicher - am elegantesten sieht es mit einem typedef aus:)
typedef void (*fptr)(int); fptr CALLERFUNC(fptr Funtion, int p);
-
hey gute Idee, hab ich jetzt garnicht mehr dran gedacht
danke!Gruß Chris
-
So gehört das:
void ( *call( void ( *ptr )( int ), int ) )( int )Aber Typedefs sind auf jedenfall schöner!

-
Naja, ich würde std::tr1::function benutzen. DAS ist schöner. :p Vorallem kann man das dann auch für Funktionen in Klassen benutzen.
// Funktion: float foo(int x, int y) { return x / y; } std::tr1::function<float (int x, int y)> f; f = &foo; cout << f(1, 2);
-
schöner? da steht tr1 im code. namespace mit ner zahl drin... iiiiih!
-
-
:p
-
TR1 ist eine offizielle ISO-C++-Standard Erweiterung. Was willst du also?
-
darauf hinweisen, dass es nicht zum standard gehört :p
Fragen zu bestimmten Funktionen und Abläufen in C++ (nach dem ISO-Standard)

-
Sind doch ansich beides gute Lösungen, obwohl die typedef variante mit eher zu sagt... aber die tr1 variante ist genauso gut!
Gruß Chris