2011-02-08 13 views
6
#include <QtCore/QCoreApplication> 
#include <boost/bind.hpp> 
#include <boost/function.hpp> 

class button 
{ 
public: 

    boost::function<void()> onClick; 
    boost::function<void(int ,double)> onClick2; 
}; 

class player 
{ 
public: 
    void play(int i,double o){} 
    void stop(){} 
}; 

button playButton, stopButton; 
player thePlayer; 

void connect() 
{ 
    //error C2298: 'return' : illegal operation on pointer to member function expression 
    playButton.onClick2 = boost::bind(&player::play, &thePlayer); 
    stopButton.onClick = boost::bind(&player::stop, &thePlayer); 
} 

int main(int argc, char *argv[]) 

{ 

    QCoreApplication a(argc, argv); 
    connect(); 
    return a.exec(); 
} 

Respuesta

13
boost::bind(&player::play, &thePlayer) 

Es necesario utilizar marcadores de posición para los dos argumentos:

boost::bind(&player::play, &thePlayer, _1, _2) 

Los marcadores de posición le permiten decir "Sólo estoy vinculante ciertos argumentos; otros argumentos se proporcionarán más adelante."

2

Y si quieres crear código portable - especificar espacio de nombres de marcadores de posición directamente:

boost::bind(&player::play, &thePlayer, ::_1, ::_2); // Placeholders of boost::bind are placed in global namespace. 
Cuestiones relacionadas