如何使用std::bind和std::函数将方法作为回调传递



我在SO 上找到了这个答案

https://stackoverflow.com/a/40944576/5709159

我在回答中做了所有类似的事情,但我得到了一个错误

这是我的代码

我需要通过回调的方法

/*static*/ void Utils::copy_files(std::function<void(int, int)> progress_callback,
std::string const & path_from,
std::string const & path_to)
{
....
}

我的回调实现

void TV_DepthCamAgent::progress_callback(int count, int copied_file)
{
...
}

使用

void TV_DepthCamAgent::foo()
{
...
auto callback = std::bind(&TV_DepthCamAgent::progress_callback,
this);
shared::Utils::copy_files(callback, path_from_copy, path_to_copy);
...
}

有一个错误,我得到

SE0312不存在从"std::Binder"到"std::function"的合适的用户定义转换

错误C2664"void shared::Utils::copy_files(std::function,const std::string&,const std::string&amp;(":无法将参数1从"std::_Binder"转换为"std:::function">

我做错了什么?

您错过了占位符:

auto callback = std::bind(&TV_DepthCamAgent::progress_callback,
this,
std::placeholders::_1,
std::placeholders::_2);

但更简单的IMO是使用lambda:

auto callback = [this](int count, int copied_file){
return this->progress_callback(count, copied_file);
};