2012-04-03 6 views
5

最近、学習目的でboost::signals2と遊んでいましたが、私はQtのように、の非静的スロットに信号を接続できるかどうか疑問に思っていました。次のことを考えてみましょう:boost :: signals2スロットを非静的関数メンバーとして使用しますか?

class Worker { 
    typedef boost::signals2::signal<void (const std::string &)> SendMessage; 
public: 
    typedef SendMessage::slot_type SendMessageSlotType; 
    boost::signals2::connection connect(const SendMessageSlotType &slot) { 
     return send_message.connect(slot); 
    } 
private: 
    SendMessage send_message; 
}; 

class Controller { 
public: 
    Controller() { 
     worker.connect(&Controller::print); 
    } 
private: 
    static void print(const std::string &message) { 
     std::cout << message << std::endl; 
    } 

    Worker worker; 
}; 

今、私はController::print非静的メンバを作りたいです。たとえばboost::threadでは、これはboost::bindを使用して達成できます。 boost::signals2でこれを行う方法はありますか?ただ、

答えて

11

class Controller { 
public: 
    Controller() { 
     worker.connect(boost::bind(&Controller::print, this, _1)); 
    } 
private: 
    void print(const std::string &message) { 
     std::cout << message << std::endl; 
    } 

    Worker worker; 
}; 
関連する問題