首頁  >  文章  >  後端開發  >  std::bind 如何處理成員函數,為什麼需要物件參考?

std::bind 如何處理成員函數,為什麼需要物件參考?

DDD
DDD原創
2024-10-31 23:47:29454瀏覽

How does std::bind handle member functions, and why is an object reference required?

std::bind 如何與成員函數一起使用

將std::bind 與成員類別函數一起使用時,有幾個關鍵概念發揮作用:

第一個參數:指標

在語法std::bind(&Foo::print_sum, &foo, 95, _1) 中,第一個參數是不是對函數指標的引用,正如人們可能假設的那樣。相反,它是一個代表成員函數本身的指標

第二個參數:物件參考

第二個參數,在本例中為&foo ,是對適當類別(Foo) 的物件的引用。這是必要的,因為成員函數需要一個物件實例來操作。

std::bind 如何處理成員函數

在內部,std::bind 偵測到第一個參數是指向成員函數的指針,並使用std: :mem_fn 將其轉換為可呼叫物件。這個可呼叫物件保留指向成員函數的指針,並需要一個物件實例作為其第一個參數。

需要物件參考

綁定到成員函數時,物件參考變得至關重要,因為成員函數與特定類別關聯並且需要呼叫該類別的對象。 std::bind 的第二個參數提供此物件引用,允許成員函數對指定物件進行操作。

範例

考慮以下程式碼:

<code class="cpp">struct Foo {
    int value;
    void f(int n) { std::cout << "f(" << this->value << ", " << n << ")\n"; }
};

int main() {
    Foo foo{10};

    auto f_bound = std::bind(&Foo::f, &foo, _1);
    f_bound(20); // Output: f(10, 20)
}</code>

在此範例中,f_bound 是一個可呼叫對象,它使用它接收的任何其他參數呼叫foo 物件上的f 成員函數。所以,當我們呼叫 f_bound(20) 時,相當於呼叫 foo.f(20),它會印出「f(10, 20)」。

以上是std::bind 如何處理成員函數,為什麼需要物件參考?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn