有没有办法将升压信号直接连接到另一个信号? [英] Is there a way to connect a boost signal directly to another signal?

查看:105
本文介绍了有没有办法将升压信号直接连接到另一个信号?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想知道是否有更好的方法将一类的Boost信号直接连接到另一类的信号?

I was wondering if there is a nicer way to connect a Boost signal of one class directly to a signal of another class?

例如,想象一个 facade类,其中有许多成员提供自己的信号.现在假设立面要暴露这些信号.我通常最终会编写样板方法,然后将其作为信号处理程序进行连接.

For example imagine a facade class with a bunch of members which provide their own signals. Now assume that the facade wants to expose these signals. I usually end up writing boilerplate methods which I then connect as signal handlers.

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

现在这不是很优雅,一段时间后变得非常乏味.有没有一种方法可以不必编写此类转发方法?

Now this is not very elegant and becomes very tedious after while. Is there a way to do this without having to write these kinds of forwarding methods?

推荐答案

是的,事实证明您可以直接链接"信号.请参阅此线程.它没有记录,但似乎是一个非常有用的功能.

Yes, it turns out that you can "chain" signals directly. Please see this thread. It's undocumented, but it seems a very useful feature.

这篇关于有没有办法将升压信号直接连接到另一个信号?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆