Je travaille sur la configuration d'une fonction membre en tant que rappel d'une bibliothèque C que j'utilise. La bibliothèque C met en place callbacks comme ceci:Fonction de membre de classe comme rappel utilisant boost :: bind et boost :: function
typedef int (*functionPointer_t)(myType1_t*, myType2_t*, myType3_t*);
setCallback(param1, param2, functionPointer, param4)
Je voudrais utiliser boost :: bind (si possible) pour passer le pointeur de fonction. Je préférerais que la fonction pointée sur soit un membre de la classe instanciée, pas un membre statique. Par exemple.
Class A {
public:
A();
protected:
int myCallback(myType1_t*, myType2_t*, myType3_t*); //aka functionPointer_t
}
Cela peut-il être fait en utilisant boost :: bind et boost :: function? Par How can I pass a class member function as a callback? (la 3e réponse), il semble que je pourrais déclarer les éléments suivants (quelque part, ou comme typedef):
boost::function<int (A*, myType1_t*, myType2_t*, myType3*> myCallbackFunction
Et puis quelque part dans A (cteur) boost d'appel :: bind sur ce type, et passez-le dans l'appel C-library. Est-ce possible ou suis-je hors de la base? Merci beaucoup.
je ne peux pas changer l'interface de setCallback – jdt141
Désolé, j'ai raté cette partie de votre message modifié pour corriger –
@ jdt141:.. Pouvez-vous abuser de l'un des 'param1 , param2, param4' dans 'setCallback' de se faufiler un jeton qui sera retourné à vous via' int (* functionPointer_t) (myType1_t *, myType2_t *, myType3_t *) ' –