”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 如何在通用 `std::function` 对象中存储成员函数指针?

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

发布于2024-12-21
浏览:498

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

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

当尝试使用以下方式在映射中存储特定类的成员函数指针时std::function 对象,开发人员可能会遇到错误:“term 不能计算为采用 0 个参数的函数。”当将成员函数指针直接分配给 std::function 对象时,就会出现此错误。

问题的症结在于,非静态成员函数需要隐式的“this”指针作为第一个参数。要纠正此问题,必须显式绑定第一个参数。

解决方案:

std::function f = std::bind(&Foo::doSomething, this);

这种方法有效地将“this”指针绑定为第一个参数,允许 std::function 对象正确捕获成员function.

处理带参数的函数:

对于带参数的成员函数,必须指定占位符来指示绑定参数的位置。

using namespace std::placeholders;
std::function f = std::bind(&Foo::doSomethingArgs,
                                                 this,
                                                 std::placeholders::_1,
                                                 std::placeholders::_2);

C 11 Lambda 语法:

如果编译器支持 C 11 lambda,则可以使用更简洁的方法:

std::function f = [=](int a, int b) {
    this->doSomethingArgs(a, b);
};

通过遵循这些技术,开发人员可以使用通用 std::function 对象有效地存储和调用成员函数指针。

最新教程 更多>

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3