标准库函数中指向成员函数的函数指针
尝试在包含以下内容的映射中存储指向类的成员函数的函数指针标准库函数对象时,会出现一个常见错误。如下面的代码所示,将成员函数直接分配给函数对象会导致错误:
#include <functional> class Foo { public: void doSomething() {} void bindFunction() { // ERROR std::function<void(void)> f = &Foo::doSomething; } };
遇到的错误是由于成员函数对对象的隐式要求所致。成员函数总是使用对象来调用,有效地传递“this”指针作为其第一个参数。
要解决此问题,函数签名必须指定该函数不接受任何参数(
std::function<void(void)> f = std::bind(&Foo::doSomething, this);无效(无效)>)。此外,第一个(也是唯一的)参数必须被绑定。这可以使用 std::bind() 来实现:
using namespace std::placeholders; std::function<void(int, int)> f = std::bind(&Foo::doSomethingArgs, this, std::placeholders::_1, std::placeholders::_2);如果函数需要参数,可以使用占位符:
std::function<void(int, int)> f = [=](int a, int b) { this->doSomethingArgs(a, b); };也可以使用 C 11 lambda:
以上是如何在标准库函数对象中存储成员函数指针?的详细内容。更多信息请关注PHP中文网其他相关文章!