首頁 > 後端開發 > C++ > 如何在 std::function 中正確使用成員函式指標?

如何在 std::function 中正確使用成員函式指標?

Mary-Kate Olsen
發布: 2024-12-20 13:40:10
原創
1001 人瀏覽過

How to Correctly Use Member Function Pointers with std::function?

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

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