2012-08-05 67 views
7

我想知道是否有更好的方法將一個類的Boost信號直接連接到另一個類的信號?有沒有辦法將升壓信號直接連接到另一個信號?

例如想象一個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 2012-08-05 12:33:00

+1

該鏈接似乎已經死亡。有關的討論可以在這裏找到: https://groups.google.com/forum/#!topic/boost-list/So4i8JXneJ0 – 2016-11-25 16:50:53

+0

@Kaan C. Fidan更新,謝謝! – 2016-11-26 18:42:35