标准库函数中指向成员函数的函数指针
尝试在包含以下内容的映射中存储指向类的成员函数的函数指针标准库函数对象时,会出现一个常见错误。如下面的代码所示,将成员函数直接分配给函数对象会导致错误:
#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);
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); };
以上是如何在标准库函数对象中存储成员函数指针?的详细内容。更多信息请关注PHP中文网其他相关文章!