2012-04-03 16 views
5

मैं हाल ही में सीखने के उद्देश्यों के लिए boost::signals2 के साथ खेल रहा हूं, और मैं सोच रहा था कि क्या मैं गैर-स्थिर स्लॉट को कक्षा (जैसे मैं क्यूटी में) में स्थित सिग्नल कनेक्ट कर सकता हूं। निम्नलिखित पर विचार करें:बढ़ावा :: सिग्नल 2 स्लॉट एक गैर स्थैतिक फ़ंक्शन सदस्य के रूप में?

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