[Boost::bind] Cdecl / Callback
Bonjour à tous :D
Je me pose la question suivante (y'a des matins comme ça :roll: ) :
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 : :bug: :aie:
Voici un code minimal :
Code:
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 !!!
} |
Quelqu'un saurait me dire s'il y a une manière de faire ?