Utilisation d'une fonction membre de classe C comme fonction de rappel C
Problème :
Quand en essayant d'enregistrer une fonction membre de la classe C en tant que fonction de rappel pour une bibliothèque C, le compilateur renvoie une erreur indiquant que le type de la fonction ne correspond pas correspondre à la signature attendue.
Questions :
Réponse :
1. Utilisation d'une fonction membre statique :
Oui, il est possible d'enregistrer une fonction membre de classe C en tant que fonction de rappel, mais il doit s'agir d'une fonction membre statique. Les fonctions membres statiques n'ont pas de premier paramètre implicite de classe de type A*, leur signature correspond donc à la signature de rappel attendue. Par exemple :
class A { public: static int e(int *k, int *j) { return 0; } }; int main() { register_with_library(A::e); return 0; }
2. Approches alternatives :
Vous pouvez également utiliser l'une des approches suivantes :
void e_wrapper(int *k, int *j) { A().e(k, j); }
int (*ptr)(int *, int *) = &A::e; register_with_library(ptr);
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!