Parece que solo necesita pasar la función en sí. Casi lo tienes. Aquí está la sintaxis correcta:
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.
También puedes declarar Foo de la siguiente manera:
void foo(double (*f)());
Las funciones no son objetos de primera clase en C ++, por lo que la única forma de crear un cierre con algunas variables (por ejemplo, si desea llevar la función o llamar a una función de miembro no estática) es los functores (objetos con operador sobrecargado () ). Hay varias formas de obtener tal objeto:
- Defínelo usted mismo, almacene todas las variables necesarias en los campos y paselo como argumento de la función.
- Use funciones lambda de C ++ 11 y función std ::
- Use Boost :: Function and Boost :: Bind.