2012-04-03 126 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; 
}; 
相關問題