標準函式中指向成員函數的函數指標
嘗試在包含下列內容的對應中儲存指向類別的成員函數的函數指標標準庫函數物件時,會出現一個常見錯誤。如下面的程式碼所示,將成員函數直接指派給函數物件會導致錯誤:
#include <functional> class Foo { public: void doSomething() {} void bindFunction() { // ERROR std::function<void(void)> f = &Foo::doSomething; } };
遇到的錯誤是由於成員函數對物件的隱式要求所致。成員函數總是使用物件來調用,有效地傳遞“this”指標作為其第一個參數。
要解決此問題,函數簽章必須指定函數不接受任何參數(
std::function<void(void)> f = std::bind(&Foo::doSomething, this);無效(無效)>)。此外,第一個(也是唯一的)參數必須被綁定。這可以使用std::bind() 來實現:
using namespace std::placeholders; std::function<void(int, int)> f = std::bind(&Foo::doSomethingArgs, this, std::placeholders::_1, std::placeholders::_2);如果函數需要參數,可以使用佔位符:
std::function<void(int, int)> f = [=](int a, int b) { this->doSomethingArgs(a, b); };也可以使用C 11 lambda:
以上是如何在標準庫函數物件中儲存成員函數指標?的詳細內容。更多資訊請關注PHP中文網其他相關文章!