標準ライブラリ関数を使用したメンバー関数への関数ポインター
以下を含むマップ内のクラスのメンバー関数への関数ポインターを格納しようとしました。標準ライブラリ関数オブジェクトを使用すると、一般的なエラーが発生します。以下のコードに示されているように、メンバー関数を関数オブジェクトに直接割り当てるとエラーが発生します。
#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);
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); };
以上がメンバー関数ポインターを標準ライブラリ関数オブジェクトに保存するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。