Maison > développement back-end > C++ > Les fonctions membres de la classe C peuvent-elles être utilisées comme rappels C ?

Les fonctions membres de la classe C peuvent-elles être utilisées comme rappels C ?

Barbara Streisand
Libérer: 2024-12-15 07:36:14
original
630 Les gens l'ont consulté

Can C   Class Member Functions Be Used as C Callbacks?

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 :

  1. Est-il possible d'enregistrer une fonction membre de la classe C en tant que fonction de rappel ?
  2. Est-ce que il existe des approches alternatives pour résoudre ce problème problème ?

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;
}
Copier après la connexion

2. Approches alternatives :

Vous pouvez également utiliser l'une des approches suivantes :

  • Créer une fonction gratuite : Créez une fonction gratuite avec le signature et appelez la fonction membre de la classe C à partir de celle-ci. Par exemple :
void e_wrapper(int *k, int *j) {
    A().e(k, j);
}
Copier après la connexion
  • Utiliser un pointeur de fonction : Définissez un pointeur de fonction et attribuez-lui l'adresse de la fonction membre de la classe C. Par exemple :
int (*ptr)(int *, int *) = &A::e;
register_with_library(ptr);
Copier après la connexion

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal