Sembra che tu abbia bisogno solo della funzione stessa da passare. Ce l'hai quasi. Ecco la sintassi corretta:
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.
Puoi anche dichiarare Foo come segue:
void foo(double (*f)());
Le funzioni non sono oggetti di prima classe in C ++, quindi l'unico modo per creare una chiusura con alcune variabili (ad esempio, se si desidera trasportare la funzione o chiamare una funzione membro non statica) è funttori (oggetti con operatore sovraccarico () ). Esistono diversi modi per ottenere tale oggetto:
- Definiscilo da solo, memorizza tutte le variabili necessarie nei campi e passalo come argomento della funzione.
- Usa le funzioni Lambda di C ++ 11 e la funzione std ::
- Usa boost :: function and boost :: bind.