2

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

此函数应采用信号使用的插槽类型的参数(返回类型为void ,精度为唯一 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);
    }
4

1 回答 1

5

您还可以使用我认为的 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 文档,以更好地使用信号2。此示例代码未经测试,但包含解决您的问题所需的所有内容。

于 2013-11-21T14:39:51.723 回答