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(); 
} 

答えて

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

は、次の2つの引数のプレースホルダを使用する必要があります。

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

は、プレースホルダは、あなたが言うことを許可し、「私は、特定の引数を結合しています。他の引数は、後に提供されます。」

2

そして、あなたはポータブルなコードを作成したい場合は - 直接プレースホルダの名前空間を指定:

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