微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

std::bind to std::function 转换问题

如何解决std::bind to std::function 转换问题

尝试使用以下代码std::bind() 获取函数对象:

driver_manager driverManager();

std::function<void(mqtt::const_message_ptr,mqtt::async_client*,callback*,sql::Driver*)> fn = std::bind(&driver_manager::test_callback,&driverManager,std::placeholders::_1,std::placeholders::_2,std::placeholders::_3,std::placeholders::_4);

导致错误

错误:从'std::_Bind_helper,sql::Driver*) 转换,driver_manager (*)(),const std::_Placeholder&,const std::_Placeholder&>:: type' 到非标量类型 'std::function,sql::Driver*)>' 请求

几个小时以来,我一直试图找出问题所在,这段代码有什么问题?

编辑

driver_manager.hpp

class driver_manager{
public:
    driver_manager();
    void test_callback(mqtt::const_message_ptr,sql::Driver*);
};

driver_manager.cpp

driver_manager::driver_manager(){

}

void driver_manager::test_callback(mqtt::const_message_ptr msg,mqtt::async_client *client,callback *cb,sql::Driver *driver){
    std::cout << "Callback triggered" << std::endl;
}

解决方法

正如@Patrick Roberts 在评论中指出的那样,当需要 driver_manager 的实例时,我试图将函数传递给 std::bind。解决方案是改变

driver_manager driverManager();

driver_manager driverManager;

有关详细信息,请参阅 [StackOverflow 答案] https://stackoverflow.com/a/9490384/11693641

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。