Enregistrement des fonctions membres de la classe C en tant que fonctions de rappel C
Lorsque nous travaillons avec des bibliothèques C qui nécessitent des fonctions de rappel, nous pouvons rencontrer la nécessité de nous inscrire Fonctions membres de la classe C. Cependant, tenter d'enregistrer une fonction membre non statique en tant que rappel entraîne une erreur du compilateur.
Pouvons-nous enregistrer les fonctions membres de la classe C ?
Oui, c'est le cas. possible d'enregistrer les fonctions membres de la classe C en tant que fonctions de rappel à l'aide de fonctions membres statiques.
Fonction membre statique Approche
Les fonctions membres statiques n'ont pas de premier paramètre implicite du type de classe. Ainsi, leur signature correspond au type attendu de la fonction de rappel, permettant de les enregistrer avec succès.
Exemple
class A { public: static int e(int *k, int *j) { return 0; } }; A::A() { register_with_library(A::e); }
Approches alternatives
int e(int *k, int *j) { A a; return a.e(k, j); } A::A() { register_with_library(e); }
struct EF { A* a; int operator()(int *k, int *j) { return a->e(k, j); } }; A::A() { EF ef = {this}; register_with_library(ef); }
Le choix de l'approche dépend des exigences spécifiques de la bibliothèque C et du niveau d'encapsulation et de réutilisabilité souhaité.
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!