Sto lavorando alla configurazione di una funzione membro come callback per una libreria C che sto utilizzando. Il C-libreria di imposta callback come questo:Funzione membro della classe come richiamata utilizzando la funzione boost :: bind e boost ::
typedef int (*functionPointer_t)(myType1_t*, myType2_t*, myType3_t*);
setCallback(param1, param2, functionPointer, param4)
Vorrei usare boost :: bind (se possibile) per passare il puntatore a funzione. Preferirei che la funzione indicata fosse un membro della classe istanziata, non un membro statico. Per esempio.
Class A {
public:
A();
protected:
int myCallback(myType1_t*, myType2_t*, myType3_t*); //aka functionPointer_t
}
questo può essere fatto utilizzando boost :: bind e boost :: funzione? Per How can I pass a class member function as a callback? (3 ° risposta) sembra che ho potuto dichiarare la seguente (da qualche parte, o come un typedef):
boost::function<int (A*, myType1_t*, myType2_t*, myType3*> myCallbackFunction
E poi da qualche parte in A (ctor) chiamata boost :: bind su quel tipo, e passalo alla chiamata della C-library.
È possibile, o sono spento? Grazie mille.
Non riesco a cambiare l'interfaccia di setCallback – jdt141
Spiacente, ho perso quella parte del tuo post. Modificato per correggere. –
@ jdt141: Puoi abusare di uno di 'param1 , param2, param4' in 'setCallback' per intrufolarsi in un token che ti verrà restituito via' int (* functionPointer_t) (myType1_t *, myType2_t *, myType3_t *) '? –