在通用std::function 物件中儲存成員函數指標
當嘗試使用以下方式在映射中儲存特定類別的成員函數指標時std::function 對象,開發人員可能會遇到錯誤:「term 不能計算為採用0 個參數的函數。」當將成員函數指標直接指派給std::function 物件時,就會出現此錯誤。
問題的癥結在於,非靜態成員函數需要隱式的「this」指標作為第一個參數。若要修正此問題,必須明確綁定第一個參數。
解:
std::functionf = std::bind(&Foo::doSomething, this);
這種方法有效地將「this」指標綁定為第一個參數,允許std::function物件正確捕獲成員function.
處理帶參數的函數:
對於帶參數的成員函數,必須指定佔位符來指示綁定參數的位置。
using namespace std::placeholders; std::functionf = std::bind(&Foo::doSomethingArgs, this, std::placeholders::_1, std::placeholders::_2);
C 11 Lambda 語法:
如果編譯器支援C 11 lambda,則可以使用更簡潔的方法:
std::functionf = [=](int a, int b) { this->doSomethingArgs(a, b); };
透過遵循這些技術,開發人員可以使用通用 std::function 物件有效地儲存和呼叫成員函數指標。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3