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