在異構類別之間傳遞回呼
在C 中,定義可以在不同類別之間共享的回調可能會帶來挑戰。雖然提供靜態成員函數並將指標傳遞給類別實例是一種常見方法,但它限制了靈活性。以下是如何使用 C 11 的 std::function 和 std::bind:
重構 EventHandler
重建 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) }
中刪除static 關鍵字並提供一個參數: 將Callback 綁定到 EventHandler
,使用handler->addHandler(std::bind(&MyClass::Callback, this, std::placeholders::_1));
:
_1
_1 佔位符表示單一參數。
void freeStandingCallback(int x) { // ... } handler->addHandler(freeStandingCallback);
您可以直接在中使用獨立函數
addHandlerhandler->addHandler([](int x) { std::cout << "x is " << x << '\n'; });
addHandler
:此外:
此外:此外此外,C 11 lambda 表達式可以在 addHandler:結論通過僱用std::function 和std::bind,回呼可以在異構類別之間無縫傳遞,提供靈活性和程式碼可重複使用性。以上是C 11 的 `std::function` 和 `std::bind` 如何解決異質類別回呼挑戰?的詳細內容。更多資訊請關注PHP中文網其他相關文章!