首頁 > 後端開發 > C++ > `std::bind` 如何與 C 中的成員函數一起運作?

`std::bind` 如何與 C 中的成員函數一起運作?

Barbara Streisand
發布: 2024-10-29 21:38:30
原創
795 人瀏覽過

How does `std::bind` work with member functions in C  ?

了解 std::bind 與成員函數

std::bind 是 C 中的多功能工具,允許創建綁定函數以供以後調用。理解其在成員函數中的用法可能具有挑戰性,但本討論旨在闡明所涉及的複雜性。

第一個參數:指針,而不是引用

宣告成員的綁定時函數中,std::bind 的第一個參數不是對成員函數的引用,而是指向它的指針。這是因為函數和資料成員在作為參數傳遞時都會衰減為指標。

第二個參數:物件或指標

處理成員函數時 std::bind 的第二個參數指定物件或指向將用於呼叫成員函數的物件的指標。這是必要的,因為成員函數有一個隱式的 this 指針,指向它們所屬的物件。

內部實作

在內部,std::bind 似乎創建了一個包裝該指標的可呼叫物件到成員函數。呼叫此綁定函數時,指定的物件將用作 this 指標。

為什麼是指向物件的指標?

與獨立於任何特定物件的函數指標不同,成員函數指標與它們所屬的類別相關聯,但可以與該類別的任何物件一起使用。 std::bind 透過在處理成員函數時要求物件指標作為第二個參數來支援這一點。

範例

考慮以下程式碼:

<code class="cpp">struct Foo {
    void print_sum(int n1, int n2) { std::cout << n1 + n2 << '\n'; }
};

Foo foo;

auto f = std::bind(&Foo::print_sum, &foo, 95, _1);</code>
登入後複製

在此例如,std::bind 的第一個參數是&Foo::print_sum,它是指向Foo 類中的成員函數print_sum 的指標。第二個參數是 &foo,它是指向 foo 物件的指標。當呼叫 f 時,&foo 用作 this 指針,允許使用 foo 物件上的正確上下文呼叫 print_sum。

以上是`std::bind` 如何與 C 中的成員函數一起運作?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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