首页 > 后端开发 > C++ > 如何在通用 `std::function` 对象中存储成员函数指针?

如何在通用 `std::function` 对象中存储成员函数指针?

Linda Hamilton
发布: 2024-12-23 20:39:10
原创
254 人浏览过

How to Store Member Function Pointers in Generic `std::function` Objects?

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

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