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

回答

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

您需要使用的佔位符兩個參數:

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

佔位符讓你說「我只是結合某些參數;其他參數將在稍後提供。」

2

如果你想創建可移植的代碼 - 直接指定佔位符的命名空間:

boost::bind(&player::play, &thePlayer, ::_1, ::_2); // Placeholders of boost::bind are placed in global namespace. 
相關問題