首页 > 后端开发 > C++ > 如何在 C 中正确传递类成员函数作为回调?

如何在 C 中正确传递类成员函数作为回调?

Linda Hamilton
发布: 2024-12-16 13:26:21
原创
582 人浏览过

How to Correctly Pass Class Member Functions as Callbacks in C  ?

克服将类成员函数作为回调传递时的编译错误

由于误解,在将类成员函数作为回调传递时遇到编译错误关于语法和成员中隐藏的“this”参数函数。

澄清成员函数

成员函数不是独立函数,而是带有附加隐藏“this”指针的函数。该指针引用该函数所属类的实例。当使用类实例语法(例如 object.memberFunction())调用成员函数时,编译器会自动确定“this”的值。

语法难题

您最初的方法失败了,因为您尝试将 &CLoggersInfra::RedundencyManagerCallBack 作为回调传递。该函数指针缺少必要的“this”指针。正确的语法是:

m_cRedundencyManager->Init(std::bind(&CLoggersInfra::RedundencyManagerCallBack, this));
登录后复制

揭开隐藏的“this”

您想要传递特定于 CLoggersInfra 类的特定实例的回调。为了解决隐藏的“this”指针,您需要显式绑定它。

std::bind1st 和 boost::bind 救援

使用 std::bind1st或 boost::bind 绑定“this”指针,创建一个新函数,该函数将实例作为隐藏参数,并照常使用回调的原始参数。这解决了编译问题。

隐藏的陷阱

Init 需要一个原始函数指针,而 boost::bind 不提供开箱即用的功能。不过,StackOverflow 提供了一种将 boost::functions 转换为原始指针的解决方案。

使用 Lambda 函数更新 C 11

在 C 11 及更高版本中,捕获的 lambda 函数为此,“this”可以替换 boost::bind。

以上是如何在 C 中正确传递类成员函数作为回调?的详细内容。更多信息请关注PHP中文网其他相关文章!

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