Eu tenho a situação em que uma função chama uma das várias funções possíveis. Este parece ser um bom lugar para passar uma função como parâmetro. Nesta resposta quoara de Zubkov, existem três maneiras de fazer isso.
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
Quando deve ser usado o método? Quais são as diferenças? Prefiro a abordagem mais simples, por que a primeira maneira nem sempre deve ser usada?
Para minha situação, a função é chamada apenas uma vez e eu gostaria de mantê-la simples. Eu tenho que trabalhar com passar pelo ponteiro e eu apenas chamo com g(myFunc)
onde myFunc
é a função que é chamada por último.
g(+f);
funciona para os dois primeiros, mas não para o terceiro.
int g(int x(int))
, x
é um ponteiro, mesmo que não pareça um. A declaração global correspondente int x(int);
declara uma função, não um ponteiro de função.
x
como ponteiro.