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
Mary-Kate Olsenoriginal
2024-12-14 06:46:13269parcourir

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;
}

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!

Déclaration:
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