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