如何處理std::function 物件中的成員函數指標
在std::function 物件中使用成員函數時,某些複雜情況可以出現。考慮以下程式碼:
#include <functional> class Foo { public: void doSomething() {} void bindFunction() { // ERROR std::function<void(void)> f = &Foo::doSomething; } };
會出現錯誤,因為非靜態成員函數隱式傳遞「this」指標作為參數。然而,這裡的 std::function 簽章並沒有考慮這個參數。
解:將成員函式綁定到 std::function物件
要解決這個問題,第一個參數(“this”)必須明確綁定:
std::function<void(void)> f = std::bind(&Foo::doSomething, this);
對於帶有參數的函數,佔位符可以是利用:
using namespace std::placeholders; std::function<void(int, int)> f = std::bind(&Foo::doSomethingArgs, this, _1, _2);
在C 11 中,還可以使用lambda:
std::function<void(int, int)> f = [=](int a, int b) { this->doSomethingArgs(a, b); };
透過結合這些技術,程式設計師可以成功地使用 std::function 物件中的成員函數指針,有效管理隱含的「this」參數。
以上是如何在 std::function 中正確使用成員函式指標?的詳細內容。更多資訊請關注PHP中文網其他相關文章!