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

Comment une fonction membre de classe C statique peut-elle être utilisée comme rappel C ?

Mary-Kate Olsen
Libérer: 2024-12-14 06:46:13
original
209 Les gens l'ont consulté

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

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

En C, il est possible d'enregistrer une fonction membre de classe en tant que fonction de rappel C. Fonction de rappel C, mais seulement si la fonction membre est déclarée comme static.

Explication :

Les fonctions membres non statiques ont un premier paramètre implicite de classe de type A* correspondant au pointeur this. Cependant, les fonctions de rappel C n'ont généralement pas ce premier paramètre. Pour enregistrer une fonction membre de classe en tant que rappel, nous devons éliminer le pointeur this implicite.

Solution :

Déclarer la fonction membre comme statique. Cela signifie que la fonction membre n'aura pas accès au pointeur this.

class A {
  public:
   A();
   ~A();
   static int e(int *k, int *j);
};

A::A()
{
   register_with_library(e)
}

int
A::e(int *k, int *e)
{
  return 0;
}
Copier après la connexion

Approches alternatives :

Dans les cas où il n'est pas possible ou souhaitable d'utiliser une fonction membre statique, les approches alternatives incluent :

  • Création d'une fonction C simple : Définir une Fonction C qui sert de proxy pour la fonction membre de la classe, puis enregistrez la fonction C comme rappel.
  • Utilisation d'un pointeur de fonction : Créez un pointeur de fonction qui pointe vers le membre de la classe fonction, puis enregistrez le pointeur de fonction comme rappel.
  • Utilisation d'une expression lambda : C 11 introduit lambda expressions, qui constituent un moyen pratique de définir des fonctions anonymes. Vous pouvez utiliser une expression lambda pour implémenter la fonction de rappel.

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