首頁 > 後端開發 > C++ > 如何在`std::function`映射中正確儲存成員函數指標?

如何在`std::function`映射中正確儲存成員函數指標?

Linda Hamilton
發布: 2024-12-21 01:00:10
原創
529 人瀏覽過

How to Correctly Store Member Function Pointers in a `std::function` Map?

在單一類別的std::function 映射中儲存成員函數指標

當嘗試儲存指向特定成員函數的函數指標時在std::function 映射中的類別中,了解使用std::function映射呼叫非靜態成員函數的要求至關重要object.

在提供的程式碼中,錯誤源自於 std::function 的函式簽章不正確。由於非靜態成員函數始終將“this”作為隱式參數傳遞,因此應修改簽名以包含該物件作為第一個參數。

修正後的程式碼片段將是:

1

2

3

4

5

6

7

8

9

10

#include <functional>

 

class Foo {

public:

    void doSomething() {}

    void bindFunction() {

        // Correct

        std::function<void(Foo*)> f = &Foo::doSomething;

    }

};

登入後複製

要進一步將函數與參數綁定,可以使用 C 佔位符或 C 11 lambda。以下是這些方法的範例:

使用佔位符:

1

2

using namespace std::placeholders;

std::function<void(Foo*, int, int)> f = std::bind(&Foo::doSomethingArgs, this, _1, _2);

登入後複製

使用Lambda (C 11):

1

2

3

std::function<void(Foo*, int, int)> f = [=](Foo* foo, int a, int b) {

    foo->doSomethingArgs(a, b);

};

登入後複製

以上是如何在`std::function`映射中正確儲存成員函數指標?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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