Мне было интересно, есть ли более приятный способ подключить сигнал Boost одного класса напрямую к сигналу другого класса?
Например, представьте класс фасада с набором элементов, которые предоставляют свои собственные сигналы. Теперь предположим, что фасад хочет выставить эти сигналы. Обычно я заканчиваю тем, что пишу шаблонные методы, которые затем подключаю как обработчики сигналов.
using namespace boost::signal;
class A
{
public:
A(){};
virtual ~A(){};
signal signalA;
};
class B
{
public:
B(){};
virtual ~B(){};
signal 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 facadeSignalA;
signal facadeSignalB;
private:
// ugly boilerplate code used to forward signals
void forwardedSignalA()
{
facadeSignalA();
}
void forwardedSignalB()
{
facadeSignalB();
}
};
Теперь это не очень элегантно и через некоторое время становится очень утомительным. Есть ли способ сделать это без необходимости писать такие методы пересылки?