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



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

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

然而,我不太确定应该如何在方法签名中定义该参数,因为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);
    }

我认为您还可以使用boost::函数和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。这个示例代码没有经过测试,但包含了解决问题所需的所有内容。

最新更新