Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3337 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Membre non static en pointeur sur fonction pour callback

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Membre non static en pointeur sur fonction pour callback

n°2350085
azubal
Posté le 29-03-2020 à 21:03:57  profilanswer
 

Hello à tous,
J'ai un soucis sur lequel je bute et je n'arrive pas à trouver de solution malgré mes recherches.

 

J'ai une bibliothèque en C (je n'ai pas le code) qui me demande à un moment un pointeur sur fonction.
J’écris en C++ et je souhaite passer un membre de mon objet.
Je souhaite ne pas ecrire une fonction static qui prendrait "this" en paramètre pour rappeler mon membre qui devrait être public.

 

J'essai de m'en sortir avec "std::bind" ou les lambda, sans succès.

 

Si dessous mon test case :

 
Code :
  1. #include <stdio.h>
  2. #include <functional>
  3. class A
  4. {
  5. private:
  6.     int (*pfn)(int) = nullptr; // CANNOT CHANGE THAT
  7.    
  8. public:
  9.     int foo(int i) { printf("arg : %d\n", i); return 42; }
  10.    
  11.     void callfoo() {
  12.         pfn = std::bind(&A::foo, this, std::placeholders::_1); // DOES NOT COMPILE
  13.         pfn = [&](int a) { return foo(a); }; // DOES NOT COMPILE
  14.         int ret = pfn(69);
  15.         printf("ret : %d\n", ret);
  16.     }
  17.    
  18. };
  19. int main()
  20. {
  21.     A a;
  22.     a.callfoo();
  23.    
  24.     return 0;
  25. }
 


Y'a t'il un moyen de s'en sortir ?


Message édité par azubal le 29-03-2020 à 21:06:13
mood
Publicité
Posté le 29-03-2020 à 21:03:57  profilanswer
 

n°2353403
b9ron
REEEEEEEEEEEE
Posté le 07-05-2020 à 09:48:13  profilanswer
 

Tu as deux choix :  

  • Soit tu exposes ta fonction avec friend.  
  • Soit tu la sorts de la classe et dans ce cas elle devient global comme le pointeur de fonction de ta lib C.


Code :
  1. #include <stdio.h>
  2. #include <functional>
  3. class A
  4. {
  5. private:
  6.     int (*pfn)(int) = nullptr; // CANNOT CHANGE THAT
  7.  
  8. public:
  9.     friend int foo(int i) { printf("arg : %d\n", i); return 42; } // expose ta function avec friend
  10.  
  11.     void callfoo() {
  12.         pfn = &foo; // maintenant tu peux envoyer l'adresse de ta function.
  13.         int ret = pfn(69);
  14.         printf("ret : %d\n", ret);
  15.     }
  16.  
  17. };
  18. int main()
  19. {
  20.     A a;
  21.     a.callfoo();
  22.  
  23.     return 0;
  24. }


 
 Voila vite fait bien fait :o


---------------
Praise Kek

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Membre non static en pointeur sur fonction pour callback

 

Sujets relatifs
Mapping d'un tableau en fonction de valeurs déjà filtréesFonction javascript
[html] fonction scrollForcer le clavier numérique en fonction d'un input type
Puisssance d'un nombre(fonction récursive)Fonction mail() de PHP avec plusieurs serveurs SMTP
Excel VBA : fonction indiquant #value au démarrage[Python] Exercice nombre premiers et fonction seuil
Afficher / masquer div en fonction d'une liste déroulante (jQuery/JS)[RESOLU] petite aide appel fonction powershell
Plus de sujets relatifs à : Membre non static en pointeur sur fonction pour callback


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR