首页 > 后端开发 > C++ > 如何在标准库函数对象中存储成员函数指针?

如何在标准库函数对象中存储成员函数指针?

Linda Hamilton
发布: 2024-12-22 21:20:11
原创
877 人浏览过

How to Store Member Function Pointers in Standard Library Function Objects?

标准库函数中指向成员函数的函数指针

尝试在包含以下内容的映射中存储指向类的成员函数的函数指针标准库函数对象时,会出现一个常见错误。如下面的代码所示,将成员函数直接分配给函数对象会导致错误:

#include <functional>

class Foo {
public:
    void doSomething() {}
    void bindFunction() {
        // ERROR
        std::function<void(void)> f = &Foo::doSomething;
    }
};
登录后复制

遇到的错误是由于成员函数对对象的隐式要求所致。成员函数总是使用对象来调用,有效地传递“this”指针作为其第一个参数。

要解决此问题,函数签名必须指定该函数不接受任何参数(

std::function<void(void)> f = std::bind(&Foo::doSomething, this);
登录后复制
无效(无效)>)。此外,第一个(也是唯一的)参数必须被绑定。这可以使用 std::bind() 来实现:

using namespace std::placeholders;
std::function<void(int, int)> f = std::bind(&Foo::doSomethingArgs, this, std::placeholders::_1, std::placeholders::_2);
登录后复制
如果函数需要参数,可以使用占位符:

std::function<void(int, int)> f = [=](int a, int b) {
    this->doSomethingArgs(a, b);
};
登录后复制
也可以使用 C 11 lambda:

以上是如何在标准库函数对象中存储成员函数指针?的详细内容。更多信息请关注PHP中文网其他相关文章!

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