Me preguntaba si hay una manera más agradable de conectar una señal de Boost de una clase directamente a una señal de otra clase.¿Hay alguna manera de conectar una señal de refuerzo directamente a otra señal?
Por ejemplo, imagine un facade class con un grupo de miembros que proporcionan sus propias señales. Ahora suponga que la fachada quiere exponer estas señales. Normalmente termino escribiendo métodos repetitivos que luego conecto como manejadores de señal.
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();
}
};
Ahora esto no es muy elegante y se vuelve muy tedioso después de un tiempo. ¿Hay alguna forma de hacerlo sin tener que escribir este tipo de métodos de reenvío?
Spot on! Exactamente lo que estaba buscando. – djf
El enlace parece estar muerto. Puede encontrar una discusión relacionada aquí: https://groups.google.com/forum/#!topic/boost-list/So4i8JXneJ0 –
@Kaan C. Fidan actualizado, gracias! –