首页 >后端开发 >C++ >如何在 std::function 中正确使用成员函数指针?

如何在 std::function 中正确使用成员函数指针?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-20 13:40:101007浏览

How to Correctly Use Member Function Pointers with std::function?

如何处理 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn