首頁 > 後端開發 > C++ > C 11 的 `std::function` 和 `std::bind` 如何解決異質類別回呼挑戰?

C 11 的 `std::function` 和 `std::bind` 如何解決異質類別回呼挑戰?

Mary-Kate Olsen
發布: 2024-12-15 22:18:17
原創
620 人瀏覽過

How Can C  11's `std::function` and `std::bind` Solve Heterogeneous Class Callback Challenges?

在異構類別之間傳遞回呼

在C 中,定義可以在不同類別之間共享的回調可能會帶來挑戰。雖然提供靜態成員函數並將指標傳遞給類別實例是一種常見方法,但它限制了靈活性。以下是如何使用 C 11 的 std::functionstd::bind:

重構 EventHandler

重建 EventHandler重構而不是靜態方法和實例指標EventHandler 接受std::function

:
class EventHandler {
public:
    void addHandler(std::function<void(int)> callback) {
        // ... (as above)
    }
};
登入後複製

此函式接受一個接受整數參數且不接受一個接受整數參數且不接受一個接受整數參數且不接受一個接受整數參數且不接受一個接受整數參數且不接受一個接受整數參數且不接受一個接受整數參數且不接受一個接受整數參數且不接受一個接受整數參數且不接受一個接受整數參數且不接受一個接受整數參數且不傳回任何內容的“函數物件”。

適配MyClass

修改MyClassCallback

中刪除static 並提供一個參數:
class MyClass {
public:
    void Callback(int x);
    // ...
};

MyClass::Callback(int x) {
    // ... (as above)
}
登入後複製
Callback

中刪除static 關鍵字並提供一個參數: Callback 綁定到 EventHandler

,使用
handler->addHandler(std::bind(&MyClass::Callback, this, std::placeholders::_1));
登入後複製
std::bind

:

_1

_1 佔位符表示單一參數。

void freeStandingCallback(int x) {
    // ...
}

handler->addHandler(freeStandingCallback);
登入後複製
獨立函數和Lambda 表達式

您可以直接在中使用獨立函數

addHandler
handler->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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板