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

  FORUM HardWare.fr
  Programmation
  C++

  Bind, méthode et pointeur sur méthode

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Bind, méthode et pointeur sur méthode

n°2303600
ptitchep
Posté le 19-07-2017 à 15:44:00  profilanswer
 

Bonjour,

 

J'ai un fonction que je ne peux modifier qui reçoit un objet et une méthode de
cet objet pour les appeler par la suite. Cette méthode ne reçoit qu'un argument
mais j'aimerais qu'elle en reçoive un second, sachant que ce second est fixe au
moment de l'appel de la fonction. J'ai donc pensé à bind mais je suis incapable
de trouver la bonne façon de l'utiliser.

Code :
  1. #include <iostream>
  2. #include <functional>
  3. using namespace std;
  4. //Voici la fonction que je ne peux modifier (du moins le prototype, j'ai un code
  5. //bidon à l'intérieur pour mon test.
  6. template<class T>
  7. void registerHandler(T* p_object, void (T::*p_fnc)(int))
  8. {
  9.     (*p_object.*p_fnc)(1);
  10. }
  11. //Un classe bidon elle aussi
  12. struct Plop
  13. {
  14.     Plop() {}
  15.     //Une méthode qui remplit les critères
  16.     void fonction(int i) {cerr<<i<<std::endl;}
  17.     //Un méthode avec un argument de plus
  18.     void fonction2(int i, int j) {cerr<<i<<"  "<<j<<std::endl;}
  19. };
  20. int main()
  21. {
  22.     Plop p;
  23.     //Ceci fonctionne:
  24.     registerHandler<Plop>(&p, &Plop::fonction);
  25.     //Ceci ne fonctionne pas:
  26.     using namespace std::placeholders;
  27.     registerHandler<Plop>(&p, std::bind(&Plop::fonction2, _1, _2, 4));
  28.     //Ceci non plus
  29.     registerHandler<Plop>(&p, std::bind(&Plop::fonction2, &p, _1, 4));
  30.     //Ceci non plus
  31.     registerHandler<Plop>(&p, std::bind(&Plop::fonction2, _1, 4));
  32.    
  33.     return 0;
  34. }


Quelqu'un saurait-il comment faire? Est-ce seulement possible?
Merci.


Message édité par ptitchep le 19-07-2017 à 16:49:14

---------------
deluser --remove-home ptitchep
mood
Publicité
Posté le 19-07-2017 à 15:44:00  profilanswer
 

n°2303617
dalfab
Posté le 19-07-2017 à 20:36:35  profilanswer
 

Bonjour,
La fonction attend un objet et un pointeur fonction membre ayant un paramètre entier. On ne peut lui passer que ce qu'elle attend.
Si la fonction attendait un 'foncteur', on pourrait lui passer un bind, un lambda ou une fonction.
Ici on pourrait créer un type 'Relai' avec une fonction membre qui appellerait la fonction2 de Plop.

Code :
  1. class Relai {
  2.    Plop* plop;
  3.    int     y;
  4. public:
  5.    Relai( Plop& plop , int y ) : plop(&plop) , y(y) {}
  6.    void fctRelai( int i ) {
  7.       plop->fonction2( i , y );
  8.    }
  9. };
  10. int main() {
  11.     Plop   plop;
  12.     Relai  relai( plop , 4 );
  13.     registerHandler( &relai , &Relai::fctRelai );

n°2303627
ptitchep
Posté le 20-07-2017 à 09:42:14  profilanswer
 

Merci, c'est ce que j'avais fait en attendant et en désespoir de cause...


---------------
deluser --remove-home ptitchep

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

  Bind, méthode et pointeur sur méthode

 

Sujets relatifs
[JS] Créer une nouvelle méthode pour n'importe quel objetMéthode .add
PointeurPassage de variables entre méthode imbriquées
Utiliser une méthode d'une class imbriquée dans une classSystem.out.println dans méthode main
[RESOLU] Utiliser la méthode setTimeout sans HTMLPointeur intelligent et singleton [résolu]
[Resolu][VBA]pointeur sur une sous-feuille dans un sous formulaireAide sur une fonction retournat un pointeur sur char. Merci
Plus de sujets relatifs à : Bind, méthode et pointeur sur méthode


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