如何处理 std::function 对象中的成员函数指针
在 std::function 对象中使用成员函数时,某些复杂情况可以出现。考虑以下代码:
#include <functional> class Foo { public: void doSomething() {} void bindFunction() { // ERROR std::function<void(void)> f = &Foo::doSomething; } };
会出现错误,因为非静态成员函数隐式传递“this”指针作为参数。然而,这里的 std::function 签名并没有考虑这个参数。
解决方案:将成员函数绑定到 std::function 对象
要解决这个问题,第一个参数(“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, _1, _2);
在 C 11 中,还可以使用 lambda:
std::function<void(int, int)> f = [=](int a, int b) { this->doSomethingArgs(a, b); };
通过结合这些技术,程序员可以成功地使用 std::function 对象中的成员函数指针,有效管理隐含的“this”参数。
以上是如何在 std::function 中正确使用成员函数指针?的详细内容。更多信息请关注PHP中文网其他相关文章!