使用 boost::bind 和 boost::function 将成员函数分配给回调
Assigning member function to callback with boost::bind and boost::function
我正在尝试分配一个成员函数作为API方法的回调,但它返回以下错误消息,我不确定如何解决这个问题。
cannot convert ‘boost::function<int(rcv_t_stct*, msg_t_stct*)>*’ to ‘rcv_cb {aka int (*)(rcv_t_stct*, msg_t_stct*)}’
回调签名:
typedef int (*rcv_cb)(rcv_t *rcv, msg_t *msg);
回调器:
create(rcv_cb cb);
我的会员功能:
int receiver::on_received(rcv_t *rcv, msg_t *msg)
{
return 0;
}
尝试分配给二传手:
boost::function<int (rcv_t *, msg_t *)> f2( boost::bind( &receiver::on_received, this, _1, _2) );
create(f2);
溶液:
我将接收器类更改为单例,并使用静态成员函数来包装非静态成员函数。
int receiver::on_received(rcv_t *rcv, msg_t *msg)
{
return receiver::instance().on_received_private(rcv, msg);
}
这是解决此问题的最佳解决方案吗?
boost::function<>
不是一个自由函数,而是一个函子(类型实现operator()
)。不能将签名S
的函数的指针从 boost::function<S>
转换为指向的指针。如果它在您的控制范围内,您可以将回调 setter 更改为采用 boost::function<>
函数而不是自由函数。如果这超出了您的控制范围,则不能对回调使用非静态成员函数。
相关文章:
- 我正在将一个 std::string 传递给一个 boost 函数,该函数对该类型进行常量引用,但该值发生了变化
- 如何将Boost ::函数对象与所有参数绑定
- 从boost ::函数中提取参数
- Boost绑定和Boost函数,将带有参数的函数存储在向量中,然后执行它们
- 如何获得返回自身的boost::函数(或其他通用函数包装器)
- Boost函数赋值引发异常
- 正在从带有参数的new_ptr的boost::lambda::bind中获取boost::函数
- boost::函数与函数指针
- boost::函数参数定义不起作用
- 将boost::函数克隆到指针中,并用该指针调用封装的函数
- 使用boost::函数绑定到重载方法
- 如何使用boost函数来转换参数类型
- Boost::函数绑定的成员函数无效
- boost::函数与函数模板
- 如何将两个独立的boost::bind()组合为一个boost::函数
- boost元组导致boost绑定/boost函数出现问题
- 为什么某些 Boost 函数不需要以命名空间为前缀
- 从函数指针创建boost::函数的跨平台方法
- 传递boost::函数,该函数接受一个模板实参作为默认为NULL的形参
- 对模板使用boost::函数