有没有直接连接升压信号到另一个信号的方法吗?(Is there a way to connect a

2019-07-30 18:54发布

我在想,如果有一个类的升压信号直接连接到另一个类的信号,更好的方式?

例如设想一个门面类与一群构件,其提供自己的信号。 现在假设门面想公开这些信号。 我通常最终会写样板方法,然后我连接为信号处理程序。

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();
  }
};

现在,这是不是很优雅,成为一段时间后,非常繁琐。 有没有办法做到这一点,而无需编写这类转发方法?

Answer 1:

是的,事实证明,你可以在“链”的信号直接。 请参阅此线程 。 这是无证的,但它似乎是一个非常有用的功能。



文章来源: Is there a way to connect a boost signal directly to another signal?