2012-08-05 10 views
7

Mi chiedevo se c'è un modo migliore per collegare un segnale Boost di una classe direttamente a un segnale di un'altra classe?C'è un modo per collegare un segnale di boost direttamente ad un altro segnale?

Ad esempio, immagina uno facade class con un gruppo di membri che forniscono i propri segnali. Supponiamo ora che la facciata voglia esporre questi segnali. Di solito finisco per scrivere i metodi boilerplate che poi connetto come gestori di segnale.

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

Ora questo non è molto elegante e diventa molto noioso dopo un po '. C'è un modo per farlo senza dover scrivere questo tipo di metodi di inoltro?

risposta

7

Sì, risulta che è possibile "concatenare" i segnali direttamente. Si prega di vedere this thread. Non è documentato, ma sembra una caratteristica molto utile.

+0

Spot on! Esattamente quello che stavo cercando. – djf

+1

Il collegamento sembra essere morto. Una discussione correlata può essere trovata qui: https://groups.google.com/forum/#!topic/boost-list/So4i8JXneJ0 –

+0

@ Kaan C. Fidan aggiornato, grazie! –

Problemi correlati