在通用 std::function 对象中存储成员函数指针
当尝试使用以下方式在映射中存储特定类的成员函数指针时std::function 对象,开发人员可能会遇到错误:“term 不能计算为采用 0 个参数的函数。”当将成员函数指针直接分配给 std::function 对象时,就会出现此错误。
问题的症结在于,非静态成员函数需要隐式的“this”指针作为第一个参数。要纠正此问题,必须显式绑定第一个参数。
解决方案:
std::functionf = std::bind(&Foo::doSomething, this);
这种方法有效地将“this”指针绑定为第一个参数,允许 std::function 对象正确捕获成员function.
处理带参数的函数:
对于带参数的成员函数,必须指定占位符来指示绑定参数的位置。
using namespace std::placeholders; std::functionf = std::bind(&Foo::doSomethingArgs, this, std::placeholders::_1, std::placeholders::_2);
C 11 Lambda 语法:
如果编译器支持 C 11 lambda,则可以使用更简洁的方法:
std::functionf = [=](int a, int b) { this->doSomethingArgs(a, b); };
通过遵循这些技术,开发人员可以使用通用 std::function 对象有效地存储和调用成员函数指针。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3