C 11 的 `std::function` 和 `std::bind` 如何解决异构类回调挑战?
在异构类之间传递回调
在 C 中,定义可以在不同类之间共享的回调可能会带来挑战。虽然提供静态成员函数并将指针传递给类实例是一种常见方法,但它限制了灵活性。以下是如何使用 C 11 的 std::function 和 std::bind:
重构 EventHandler
重构而不是静态方法和实例指针EventHandler 接受 std::function:
class EventHandler { public: void addHandler(std::function<void(int)> callback) { // ... (as above) } };
登录后复制
适配MyClass
修改MyClass 从 Callback 中删除 static 关键字并提供一个参数:
class MyClass { public: void Callback(int x); // ... }; MyClass::Callback(int x) { // ... (as above) }
登录后复制
Callback 绑定到 EventHandler,使用std::bind:
handler->addHandler(std::bind(&MyClass::Callback, this, std::placeholders::_1));
登录后复制
_1 占位符表示单个参数。
独立函数和 Lambda 表达式
您可以直接在中使用独立函数addHandler:
void freeStandingCallback(int x) { // ... } handler->addHandler(freeStandingCallback);
登录后复制
addHandler:
handler->addHandler([](int x) { std::cout << "x is " << x << '\n'; });
登录后复制
结论通过雇用
std::function和 std::bind,回调可以在异构类之间无缝传递,提供灵活性和代码可重用性。
以上是C 11 的 `std::function` 和 `std::bind` 如何解决异构类回调挑战?的详细内容。更多信息请关注PHP中文网其他相关文章!
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前
By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
4 周前
By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前
By 尊渡假赌尊渡假赌尊渡假赌
击败分裂小说需要多长时间?
3 周前
By DDD
R.E.P.O.保存文件位置:在哪里以及如何保护它?
3 周前
By DDD

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)