在通用 std::function 对象中存储成员函数指针
当尝试使用以下方式在映射中存储特定类的成员函数指针时std::function 对象时,开发人员可能会遇到错误:“term 不能计算为采用 0 个参数的函数。”当将成员函数指针直接分配给 std::function 对象时,就会出现此错误。
问题的症结在于非静态成员函数需要隐式的“this”指针作为第一个参数。要纠正这个问题,必须显式绑定第一个参数。
解决方案:
std::function<void(void)> f = std::bind(&Foo::doSomething, this);
此方法有效地将“this”指针绑定为第一个参数,从而允许std::function 对象以正确捕获成员函数。
处理函数参数:
对于带参数的成员函数,必须指定占位符来指示绑定参数的位置。
using namespace std::placeholders; std::function<void(int, int)> f = std::bind(&Foo::doSomethingArgs, this, std::placeholders::_1, std::placeholders::_2);
C 11 Lambda 语法:
如果编译器支持 C 11 lambda,则可以使用更简洁的方法利用:
std::function<void(int, int)> f = [=](int a, int b) { this->doSomethingArgs(a, b); };
通过遵循这些技术,开发人员可以使用通用 std::function 对象有效地存储和调用成员函数指针。
以上是如何在通用 `std::function` 对象中存储成员函数指针?的详细内容。更多信息请关注PHP中文网其他相关文章!