2011-02-08 15 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(); 
} 

Odpowiedz

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

Trzeba użyć zastępcze dla dwóch argumentów:

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

Symbole zastępcze pozwalają powiedzieć „Jestem wiążące tylko niektóre z argumentów, pozostałe argumenty zostaną dostarczone później.”

2

A jeśli chcesz stworzyć przenośną kodu - określ przestrzeń nazw zastępczych bezpośrednio:

boost::bind(&player::play, &thePlayer, ::_1, ::_2); // Placeholders of boost::bind are placed in global namespace. 
Powiązane problemy