在异构类之间传递回调
在 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中文网其他相关文章!