Maison > développement back-end > C++ > Comment puis-je enregistrer les fonctions membres de la classe C en tant que rappels C ?

Comment puis-je enregistrer les fonctions membres de la classe C en tant que rappels C ?

Barbara Streisand
Libérer: 2024-12-11 19:36:14
original
701 Les gens l'ont consulté

How Can I Register C   Class Member Functions as C Callbacks?

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

Approches alternatives

  • Pointeurs de fonction : Créez un pointeur de fonction qui pointe vers le C fonction membre et enregistrez-la auprès de la bibliothèque.
int e(int *k, int *j) {
    A a;
    return a.e(k, j);
}

A::A() {
    register_with_library(e);
}
Copier après la connexion
  • Functeurs : Créez une classe foncteur qui remplace l'opérateur() pour appeler la fonction membre C. Enregistrez une instance du foncteur comme rappel.
struct EF {
    A* a;
    int operator()(int *k, int *j) {
        return a->e(k, j);
    }
};

A::A() {
    EF ef = {this};
    register_with_library(ef);
}
Copier après la connexion

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!

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