我想知道是否有更好的方法将一个类的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();
}
};
现在这不是很优雅,而在此之后变得非常乏味。有没有办法在不必写这些转发方法的情况下做到这一点?