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

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

Linda Hamilton
发布: 2024-12-21 01:00:10
原创
540 人浏览过

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板