我想知道是否有更好的方法将一类的升压信号直接连接到另一类的信号?
例如想象一个门面类 https://stackoverflow.com/questions/249581/explain-facade-pattern-with-c-example有一群提供自己信号的成员。现在假设外观想要公开这些信号。我通常最终会编写样板方法,然后将其连接为信号处理程序。
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();
}
};
现在这不是很优雅,并且在一段时间后变得非常乏味。有没有一种方法可以做到这一点而不必编写这些转发方法?
是的,事实证明您可以直接“链接”信号。请参见这个线程 https://groups.google.com/forum/#!topic/boost-list/So4i8JXneJ0。它没有记录,但似乎是一个非常有用的功能。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)