首页 >后端开发 >C++ >如何在`std::function`映射中正确存储成员函数指针?

如何在`std::function`映射中正确存储成员函数指针?

Linda Hamilton
Linda Hamilton原创
2024-12-21 01:00:10472浏览

How to Correctly Store Member Function Pointers in a `std::function` Map?

在单个类的 std::function 映射中存储成员函数指针

当尝试存储指向特定成员函数的函数指针时在 std::function 映射中的类中,了解使用 std::function 映射调用非静态成员函数的要求至关重要object.

在提供的代码中,错误源于 std::function 的函数签名不正确。由于非静态成员函数始终将“this”作为隐式参数传递,因此应修改签名以包含该对象作为第一个参数。

更正后的代码片段将是:

#include <functional>

class Foo {
public:
    void doSomething() {}
    void bindFunction() {
        // Correct
        std::function<void(Foo*)> f = &Foo::doSomething;
    }
};

要进一步将函数与参数绑定,可以使用 C 占位符或 C 11 lambda。以下是这些方法的示例:

使用占位符:

using namespace std::placeholders;
std::function<void(Foo*, int, int)> f = std::bind(&Foo::doSomethingArgs, this, _1, _2);

使用 Lambda (C 11):

std::function<void(Foo*, int, int)> f = [=](Foo* foo, int a, int b) {
    foo->doSomethingArgs(a, b);
};

以上是如何在`std::function`映射中正确存储成员函数指针?的详细内容。更多信息请关注PHP中文网其他相关文章!

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