On dirait que vous n'avez besoin que de la fonction elle-même à passer. Vous l'avez presque. Voici la syntaxe correcte:
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.
Vous pouvez également déclarer Foo comme suit:
void foo(double (*f)());
Les fonctions ne sont pas des objets de première classe en C ++, donc la seule façon de créer une fermeture avec certaines variables (par exemple, si vous souhaitez porter la fonction ou appeler une fonction membre non statique) est les fonds (objets avec opérateur surchargé () ). Il existe plusieurs façons d'obtenir un tel objet:
- Définissez-le par vous-même, stockez toutes les variables nécessaires dans les champs et passez-la comme argument de la fonction.
- Utilisez les fonctions lambda de C ++ 11 et la fonction STD ::
- Utilisez Boost :: Fonction et Boost :: Bind.