2012-08-05 13 views
7

मैं सोच रहा था कि क्या एक वर्ग के बूस्ट सिग्नल को सीधे किसी अन्य वर्ग के सिग्नल से कनेक्ट करने का एक अच्छा तरीका है?कोई सिग्नल सिग्नल सीधे किसी अन्य सिग्नल से कनेक्ट करने का कोई तरीका है?

उदाहरण के लिए facade class सदस्यों की एक समूह के साथ कल्पना करें जो अपने स्वयं के सिग्नल प्रदान करते हैं। अब मान लें कि मुखौटा इन संकेतों का पर्दाफाश करना चाहता है। मैं आम तौर पर बॉयलरप्लेट विधियों को लिखता हूं जो मैं सिग्नल हैंडलर के रूप में कनेक्ट करता हूं।

using namespace boost::signal; 

class A 
{ 
public: 
    A(){}; 
    virtual ~A(){}; 

    signal<void()> signalA; 
}; 

class B 
{ 
public: 
    B(){}; 
    virtual ~B(){}; 

    signal<void()> signalB; 
}; 

class Facade 
{ 
private: 
    A& a; 
    B& b; 

public: 
    Facade(A& refA, B& refB) 
    : a(refA), b(refB) 
    { 
    // connect A's signal to facadeSignalA 
    a.signalA.connect(boost::bind(&Facade::forwardedSignalA, this)); 
    // connect B's signal to facadeSignalB 
    b.signalB.connect(boost::bind(&Facade::forwardedSignalB, this)); 
    } 
    virtual ~Facade() {}; 

    // user visible signals 
    signal<void()> facadeSignalA; 
    signal<void()> facadeSignalB; 

private: 
    // ugly boilerplate code used to forward signals 
    void forwardedSignalA() 
    { 
    facadeSignalA(); 
    } 
    void forwardedSignalB() 
    { 
    facadeSignalB(); 
    } 
}; 

अब यह बहुत ही सुरुचिपूर्ण नहीं है और थोड़ी देर बाद बहुत कठिन हो जाता है। क्या इस तरह के अग्रेषण विधियों को लिखने के बिना ऐसा करने का कोई तरीका है?

उत्तर

7

हां, यह पता चला है कि आप सीधे "श्रृंखला" सिग्नल कर सकते हैं। कृपया this thread देखें। यह अनियंत्रित है, लेकिन यह एक बहुत उपयोगी सुविधा प्रतीत होता है।

+0

स्पॉट पर! ठीक वही जो मेरे द्वारा खोजा जा रहा था। – djf

+1

लिंक मर गया प्रतीत होता है। एक संबंधित चर्चा यहां पाई जा सकती है: https://groups.google.com/forum/#!topic/boost-list/So4i8JXneJ0 –

+0

@ कान सी फिडन अपडेट, धन्यवाद! –

संबंधित मुद्दे