Boost :: signals2 - 传递信号槽作为参数

时间:2013-11-21 13:07:17

标签: c++ boost boost-signals2

我正在使用boost :: signals2来创建一个使用信号在特定条件下运行事件的类。该类有一个名为的方法: RegisterCallback

此函数应采用信号使用的槽类型参数( void 返回类型, double 作为唯一的arg)。

但是,我不太确定如何在方法签名中定义该参数,因为signal1类的源文件对我来说是非常难以理解的。

所以我基本上想要这样做:

myTimer(interval);
myTimer.RegisterCallback(&aCallbackFunction);

以下是会员信号:

boost::signals2::signal<void (double)> m_signal;

...这里是我需要的注册方法(未完成)

   /**
    * Register a callback function that will be called when the timer interval elapses.
    */
    void RegisterCallback(const boost::signals2::signal1<???????> &slot)
    {
        m_signal.connect(slot);
    }

1 个答案:

答案 0 :(得分:3)

你也可以使用boost :: function和boost :: bind库。

typedef booost::signals2::signal(void (double)>::slot_type CallbackSlot
void RegisterCallback(CallbackSlot slot)
{
    m_signal.connect(slot);
}

// ...

class MyClass {void handler(double);}

// ...

RegisterCallback(boost::bind(MyClass::handler, this, _1));

我建议您还阅读boost :: function和boost :: bind文档,以便以良好的方式使用signals2。此示例代码未经过测试,但包含解决问题所需的所有内容。