我正在尝试使用派生参数绑定std::function
。我想要绑定的函数如下所示:
void Application::myFunction(Derived *derived) { }
函数我试图传递给这个函数(但是绑定)看起来像这样:
void Storage::register(int number, std::function<void(Base *base)>) { }
我这样做(this
关键字在此上下文中为Application
):
myStorage->register(0, std::bind(&Application::myFunction, this, std::placeholders::_1);
但这给了我错误:
错误:没有匹配的调用函数(Storage :: register ...)
知道我做错了什么吗?谢谢!
答案 0 :(得分:3)
这不起作用,因为std::function<void(Base*)>
并不能保证始终使用Derived*
调用它。您不能再这样做,而是可以直接使用Application::myFunction
致电Base*
。
根据您想要实现的目标,将其设为std::function<void(Derived *)>
或myFunction
使用Base*
。