Есть ли способ подключить сигнал усиления напрямую к другому сигналу?

Мне было интересно, есть ли более приятный способ подключить сигнал 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();
  }
};

Теперь это не очень элегантно и через некоторое время становится очень утомительным. Есть ли способ сделать это без необходимости писать такие методы пересылки?

7
задан Community 23 May 2017 в 11:53
поделиться