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

C++ Boost::signals2-将信号槽作为参数传递,c++,boost,boost-signals2,C++,Boost,Boost Signals2,我使用boost::signals2创建一个类,该类使用信号在特定条件下运行事件。此类有一个名为:RegisterCallback的方法 此函数应采用信号使用的插槽类型的参数(返回类型为void,唯一参数为double) 但是,我不太确定应该如何在方法签名中定义该参数,因为signal1类的源文件对我来说非常不可读 所以我基本上想这样做: myTimer(interval); myTimer.RegisterCallback(&aCallbackFunction); 这是会员信号: b

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

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

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

所以我基本上想这样做:

myTimer(interval);
myTimer.RegisterCallback(&aCallbackFunction);
这是会员信号:

boost::signals2::signal<void (double)> m_signal;
boost::信号2::信号m_信号;
。。。这是我需要的注册方法(未完成)

/**
*注册一个回调函数,该函数将在计时器间隔结束时调用。
*/
无效寄存器回调(常量boost::signals2::signals1和插槽)
{
m_信号连接(插槽);
}

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

该解决方案非常有效。多读一些关于它的书,但效果很好。谢谢
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));