首頁 > 後端開發 > C++ > 如何在標準庫函數物件中儲存成員函數指標?

如何在標準庫函數物件中儲存成員函數指標?

Linda Hamilton
發布: 2024-12-22 21:20:11
原創
876 人瀏覽過

How to Store Member Function Pointers in Standard Library Function Objects?

標準函式中指向成員函數的函數指標

嘗試在包含下列內容的對應中儲存指向類別的成員函數的函數指標標準庫函數物件時,會出現一個常見錯誤。如下面的程式碼所示,將成員函數直接指派給函數物件會導致錯誤:

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板