Maison > développement back-end > C++ > Une fonction membre de la classe C peut-elle être utilisée comme fonction de rappel C ?

Une fonction membre de la classe C peut-elle être utilisée comme fonction de rappel C ?

Patricia Arquette
Libérer: 2024-12-11 17:42:13
original
306 Les gens l'ont consulté

Can a C   Class Member Function Be Used as a C Callback Function?

Utilisation d'une fonction membre de classe C comme fonction de rappel C

Il est possible d'enregistrer une fonction membre de classe C en tant que fonction de rappel C , mais il y a certaines exigences à satisfaire.

Q1 : Tout d'abord, est-il possible d'enregistrer une fonction membre de la classe C comme j'essaie faire et si oui comment ?

A1 : Oui, il est possible d'enregistrer une fonction membre de la classe C en tant que fonction de rappel si la fonction est déclarée comme fonction statique. Les fonctions membres statiques n'ont pas de pointeur « this » implicite comme premier argument, contrairement aux fonctions membres non statiques. Cela leur permet d'être compatibles avec la signature d'une fonction de rappel C.

Q2 : Existe-t-il une autre/meilleure façon de résoudre ce problème ?

A2 : Voici quelques options alternatives :

  • Créer une fonction gratuite : Implémenter une fonction gratuite (non-membre) distincte qui correspond à la signature de la fonction de rappel, puis enregistrez-la auprès de la bibliothèque.
  • Utilisez un pointeur de fonction : Créez un pointeur de fonction vers une fonction membre statique de la classe C et transmettez le pointeur de fonction au bibliothèque. Cela nécessite que la bibliothèque prenne en charge l'utilisation de pointeurs de fonction comme fonctions de rappel.
  • Utilisez une fonction wrapper : Définissez une fonction wrapper en dehors de la classe qui appelle la fonction membre de la classe souhaitée et possède une signature compatible avec la fonction de rappel C. Ensuite, enregistrez la fonction wrapper auprès de la bibliothèque.

Exemple d'utilisation d'une fonction membre statique :

class A {
public:
    A() { register_with_library(&A::e); }
    ~A() {}

    static int e(int *k, int *j) {
        return 0;
    }
};
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!

source:php.cn
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