Bonjour à tous,
Je suis en train de m'interfacer avec une lib écrite en C qui me demande un pointeur de fonction pour faire un callback.
Mais moi, évidemment, j'aimerais que ma fonction de callback soit une fonction membre de mon objet.
Pour feinter, j'ai procédé comme suit :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 class Recorder { public: void Start(); int Process(int nframes, void * arg); static int StaticProcess(int nframes, void * arg); private: static Recorder * staticThis; };C'est peut-être pas très élégant, mais ça fonctionne. [EDIT: N'importe quoi, ça fonctionnera plus dés que plusieurs objets seront créés… pfiou, vais prendre une pause, moi…]
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 void Recorder::Start() { staticThis = this; fonction_c_qui_demande_un_callback(client, &StaticProcess, 0); } int Recorder::Process(int, void * arg) { //fait des choses avec les variables membres... return 0; } int Recorder::StaticProcess(int nframes, void * arg) { return staticThis->Process(nframes, arg); }
Ma question à ce sujet : n'existe-t-il pas une fonction de la librairie standard qui fasse quelque chose de ce genre ? J'ai cherché dans les mem_fun et co., mais rien n'a voulu compiler…
Vous avez une idée ?
Partager