Ich habe die Situation, dass eine Funktion eine von mehreren möglichen Funktionen aufruft. Dies scheint ein guter Ort zu sein, um eine Funktion als Parameter zu übergeben. In dieser Quoara-Antwort von Zubkov gibt es drei Möglichkeiten, dies zu tun.
int g(int x(int)) { return x(1); }
int g(int (*x)(int)) { return x(1); }
int g(int (&x)(int)) { return x(1); }
...
int f(int n) { return n*2; }
g(f); // all three g's above work the same
Wann sollte welche Methode angewendet werden? Was gibt es Unterschiede? Ich bevorzuge den einfachsten Ansatz. Warum sollte nicht immer der erste Weg verwendet werden?
In meiner Situation wird die Funktion nur einmal aufgerufen und ich möchte sie einfach halten. Ich habe es mit Pass-by-Zeiger arbeiten und ich rufe es einfach mit g(myFunc)
wo myFunc
ist die Funktion, die zuletzt aufgerufen wird.
g(+f);
funktioniert für die ersten beiden, aber nicht für die dritte.
int g(int x(int))
, x
ist ein Zeiger , obwohl es nicht wie man sieht. Die entsprechende globale Deklaration int x(int);
deklariert eine Funktion, keinen Funktionszeiger.
x
als Zeiger gekennzeichnet sind.