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?
Spot on! Esattamente quello che stavo cercando. – djf
Il collegamento sembra essere morto. Una discussione correlata può essere trovata qui: https://groups.google.com/forum/#!topic/boost-list/So4i8JXneJ0 –
@ Kaan C. Fidan aggiornato, grazie! –