必须使用对象来调用非静态成员函数。也就是说,它总是隐式传递“this”指针作为其参数。
因为你的std::function
签名指定您的函数不接受任何参数(<void(void)>
), 你必须bind第一个(也是唯一的)参数。
std::function<void(void)> f = std::bind(&Foo::doSomething, this);
如果你想绑定一个带有参数的函数,你需要指定占位符:
using namespace std::placeholders;
std::function<void(int,int)> f = std::bind(&Foo::doSomethingArgs, this, std::placeholders::_1, std::placeholders::_2);
或者,如果您的编译器支持 C++11 lambda:
std::function<void(int,int)> f = [=](int a, int b) {
this->doSomethingArgs(a, b);
}
(我手头没有支持 C++11 的编译器现在,所以我无法检查这个。)