Maison > développement back-end > C++ > Comment puis-je transmettre une fonction membre de classe C en tant que rappel à une API ?

Comment puis-je transmettre une fonction membre de classe C en tant que rappel à une API ?

Barbara Streisand
Libérer: 2024-12-24 10:15:37
original
219 Les gens l'ont consulté

How Can I Pass a C   Class Member Function as a Callback to an API?

Passer des fonctions membres de classe en tant que rappels

En essayant de transmettre une fonction membre de classe en tant que rappel à une API, vous pouvez rencontrer des erreurs de compilation en raison de la liste d'arguments manquante. Pour résoudre ce problème, il est recommandé d'utiliser des pointeurs de fonction ou des expressions lambda qui capturent l'instance de classe.

Pointeurs de fonction

Le message d'erreur suggère d'utiliser '&CLoggersInfra :: RedundancyManagerCallBack' pour créer un pointeur vers le membre. En effet, les fonctions membres de la classe prennent généralement deux paramètres : le premier paramètre étant un pointeur vers l'instance de classe et le deuxième paramètre étant le ou les arguments de la fonction.

void (CLoggersInfra::*ptr)(int); // Function pointer type
ptr = &CLoggersInfra::RedundancyManagerCallBack;
Copier après la connexion

Cependant, l'approche du pointeur de fonction nécessite vous de spécifier explicitement le premier paramètre, ce qui peut ne pas être pratique dans tous les scénarios.

Expressions Lambda (C 11 et Plus tard)

Les expressions lambda offrent un moyen plus concis et flexible de capturer l'instance de classe et de créer une fonction de rappel :

auto lambda = [this](int arg) { this->RedundancyManagerCallBack(arg); };
Copier après la connexion

Cette expression lambda capture le pointeur 'this' et définit une fonction anonyme qui prend un argument entier 'arg'. Vous pouvez ensuite transmettre le lambda comme rappel :

m_cRedundencyManager->Init(lambda);
Copier après la connexion

Conclusion

En utilisant des pointeurs de fonction ou des expressions lambda, vous pouvez transmettre efficacement les fonctions membres de la classe comme rappels tout en respecter les exigences de l'API et éviter les erreurs de compilation. Les expressions Lambda sont particulièrement pratiques dans C 11 et les versions ultérieures, car elles simplifient la capture des instances de classe.

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