有没有办法将升压信号直接连接到另一个信号?

时间:2012-08-05 11:51:46

标签: c++ boost boost-signals

我想知道是否有更好的方法将一个类的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();
  }
};

现在这不是很优雅,而在此之后变得非常乏味。有没有办法在不必写这些转发方法的情况下做到这一点?

1 个答案:

答案 0 :(得分:7)

是的,事实证明你可以直接“链接”信号。请参阅this thread。它没有文档,但它似乎是一个非常有用的功能。