Parece que você precisa apenas que a própria função seja passada.Você quase conseguiu.Aqui está a sintaxe correta:
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.
Você também pode declarar foo da seguinte maneira:
void foo(double (*f)());
Funções não são objetos de primeira classe em C++, então a única maneira de criar um fechamento com algumas variáveis (por exemplo, se você deseja carregar a função ou chamar uma função de membro não estática) são functores (objetos com operador sobrecarregado() ).Existem várias maneiras de obter esse objeto:
- Defina você mesmo, armazene todas as variáveis necessárias nos campos e passe-as como argumento da função.
- Use as funções lambda e std::function do C++ 11
- Use boost::function e boost::bind.