Sieht so aus, als ob Sie nur die Funktion selbst übergeben werden müssen. Du hast es fast. Hier ist die richtige Syntax:
typedef double (*functype)();
void foo(functype f) {
cout << f();
}
double bar() {
return 2.39;
)
foo(bar); // don't call bar here, just pass it as address.
Sie können auch Foo wie folgt erklären:
void foo(double (*f)());
Funktionen sind keine erstklassigen Objekte in C ++. Die einzige Möglichkeit, einen Verschluss mit einigen Variablen zu erzeugen (z. B. wenn Sie die Funktion tragen oder eine nicht statische Mitgliedsfunktion aufrufen möchten) sind Functors (Objekte mit überladenem Operator () ). Es gibt verschiedene Möglichkeiten, ein solches Objekt zu bekommen:
- Definieren Sie es selbst, speichern Sie alle notwendigen Variablen in Feldern und geben Sie sie als Argument der Funktion über.
- Verwenden Sie die Lambda -Funktionen von C ++ 11 und std :: Funktion
- Verwenden Sie Boost :: Funktion und Boost :: Bind.