【发布时间】:2020-05-14 08:49:44
【问题描述】:
假设我想通过引用函数来传递由std::bind 创建的函数对象:
void myCallback(int i, int j)
{
std::cout << "toCall , i=" << i << " j=" << j;
}
void worker(std::function<void(int)> & callback)
{
callback(111);
}
int main(int argc, char** argv)
{
auto foo = std::bind(myCallback, std::placeholders::_1, 222);
worker(foo);
}
这不会编译
严重性代码描述项目文件行抑制状态 错误 C2664 'void worker(std::function &)': 不能 将参数 1 从 'std::_Binder &,int>' 转换为 'std::function &' asn1test_1 D:.....\asn1test_1.....cpp 302
但是,按值传递有效:
void worker(std::function<void(int)> callback)
{
callback(111);
}
当我避免使用“auto”并改用时
std::function<void(int)> foo = std::bind(myCallback, std::placeholders::_1, 222);
它既可以通过引用传递也可以通过值传递。
Q1:为什么会出现这种行为?
Q2:将std::bind 创建的对象传递给函数的“正确”方式或数据类型是什么?
【问题讨论】:
标签: c++ pass-by-reference functor auto stdbind