ptitchep | 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 :
- #include <iostream>
- #include <functional>
- using namespace std;
- //Voici la fonction que je ne peux modifier (du moins le prototype, j'ai un code
- //bidon à l'intérieur pour mon test.
- template<class T>
- void registerHandler(T* p_object, void (T::*p_fnc)(int))
- {
- (*p_object.*p_fnc)(1);
- }
- //Un classe bidon elle aussi
- struct Plop
- {
- Plop() {}
- //Une méthode qui remplit les critères
- void fonction(int i) {cerr<<i<<std::endl;}
- //Un méthode avec un argument de plus
- void fonction2(int i, int j) {cerr<<i<<" "<<j<<std::endl;}
- };
- int main()
- {
- Plop p;
- //Ceci fonctionne:
- registerHandler<Plop>(&p, &Plop::fonction);
- //Ceci ne fonctionne pas:
- using namespace std::placeholders;
- registerHandler<Plop>(&p, std::bind(&Plop::fonction2, _1, _2, 4));
- //Ceci non plus
- registerHandler<Plop>(&p, std::bind(&Plop::fonction2, &p, _1, 4));
- //Ceci non plus
- registerHandler<Plop>(&p, std::bind(&Plop::fonction2, _1, 4));
-
- return 0;
- }
|
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
|