Bonjour à tous
Je me pose la question suivante (y'a des matins comme ça ) :
Est-il possible de passer une fonction membre non static en paramètre d'une fonction, pour un appel de callback déclarée en "cdecl".
J'utilise souvent ce mécanisme avec boost::function et boost::bind... Alors je me dis : ça ne coute rien d'essayer... (Ca serait pratique de pouvoir câbler ses callbacks de cette manière avec GLUT par exemple...)
Résultat :
Voici un code minimal :
Quelqu'un saurait me dire s'il y a une manière de faire ?
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
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 #define BOOST_MEM_FN_ENABLE_CDECL #include <boost/function.hpp> #include <boost/bind.hpp> class A { public: typedef boost::function<void(void)> CB1; typedef void ( _cdecl * CB2 )( void ); void setCB1( CB1 cb ) { _callback1 = cb; } ; void setCB2( CB2 cb ) { _callback2 = cb; } ; CB1 _callback1; CB2 _callback2; }; class B { public: void f(void) { } ; static void g(void) { } ; }; int main(int argc, char* argv[]) { A a; B b; a.setCB1( &B::g ); // OK a.setCB2( &B::g ); // OK a.setCB1( boost::bind(&B::f, &b) ); // OK a.setCB2( boost::bind(&B::f, &b) ); // Pas OK : ne compile pas !!! }
Partager