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