ホームページ > バックエンド開発 > C++ > メンバー関数ポインターを「std::function」マップに正しく格納するにはどうすればよいですか?

メンバー関数ポインターを「std::function」マップに正しく格納するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-12-21 01:00:10
オリジナル
542 人が閲覧しました

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

単一クラスの std::function マップにメンバー関数ポインターを格納する

特定のクラスのメンバー関数への関数ポインターを格納しようとするときstd::function マップ内のクラスを使用する場合、非静的メンバー関数をメソッドで呼び出すための要件を理解することが重要です。 object.

提供されたコードでは、エラーは std::function の関数シグネチャが正しくないことが原因で発生します。非静的メンバー関数は常に暗黙の引数として "this" を渡すため、最初のパラメーターとしてオブジェクトを含むようにシグネチャを変更する必要があります。

修正されたコード スニペットは次のようになります:

#include <functional>

class Foo {
public:
    void doSomething() {}
    void bindFunction() {
        // Correct
        std::function<void(Foo*)> f = &Foo::doSomething;
    }
};
ログイン後にコピー

関数をパラメーターとさらにバインドするには、C プレースホルダーまたは C 11 ラムダを利用できます。これらのアプローチの例を次に示します。

プレースホルダーの使用:

using namespace std::placeholders;
std::function<void(Foo*, int, int)> f = std::bind(&Foo::doSomethingArgs, this, _1, _2);
ログイン後にコピー

ラムダ (C 11) の使用:

std::function<void(Foo*, int, int)> f = [=](Foo* foo, int a, int b) {
    foo->doSomethingArgs(a, b);
};
ログイン後にコピー

以上がメンバー関数ポインターを「std::function」マップに正しく格納するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート