Bonjour

Voici mon problème (qui n'est pas courant et après de nombreuses recherches infructueuses je me permet de poster ici) :

j'ai une fonction dans une classe qui attend comme un argument un pointeur de fonction.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
typedef void (*pf)(X*, Y*); // la définition du pointeur de fonction (X et Y sont deux classes quelconques)
 
class CControl;
...
 
CControl::setFunction(pf uneFonction) // prend en argument un pointeur de fonction
{
...
}
L'appel de cette fonction est le suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
    AControl->setFunction(Form1->ControlEvent); // Form1->ControlEvent est une fonction correcte sauf qu'elle est dans une classe
L'objet Form1 est de type CForm1 qui est une classe définit par l'utilisateur et comprend une fonction ControlEvent dont la signature correspond a pf
(sauf que la fonction étant dans une classe ce n'est plus la même signature et la est le problème n'est-ce pas ?)

La question est comment transformer cette fonction membre en une fonction pour être utilisé dans l'appel.

En gros ça doit etre un peu comme dans la STL avec for_each quand on utilise mem_fun mais je ne comprend pas comment procéder.
J'avais essayé l'appel comme ceci:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
    AControl->setFunction(mem_fun(&CForm1::Button1OnClick));
et j'obtient le message d'erreur suivant : "Could not find a match for 'mem_fun<S,T,A>(void (CForm1::*)(X*,Y *))'"

(Mon compilateur est Borland C++ 5.5 en ligne de commande sous windows XP.)

J'espère avoir été clair (meme si j'en ai pas trop l'impression )
Merci d'avance et n'hésitez pas à me demander des éclaircissements sur le code