std::bind がメンバー関数でどのように動作するか
メンバー クラス関数で std::bind を使用する場合、いくつかの重要な概念が関係します。 :
最初の引数: ポインター
構文 std::bind(&Foo::print_sum, &foo, 95, _1) では、最初の引数は 。代わりに、これはメンバー関数自体を表す ポインター です。
2 番目の引数: オブジェクト参照
2 番目の引数、この場合は &foo 、適切なクラス (Foo) のオブジェクトへの参照です。これは、メンバー関数が操作するオブジェクト インスタンスを必要とするため必要です。
std::bind によるメンバー関数の処理方法
内部的に、std::bind は、最初の引数はメンバー関数へのポインターであり、std::mem_fn を使用して呼び出し可能なオブジェクトに変換します。この呼び出し可能オブジェクトはメンバー関数へのポインターを保持し、最初の引数としてオブジェクト インスタンスを必要とします。オブジェクト参照の必要性
メンバー関数にバインドする場合の場合、メンバー関数は特定のクラスに関連付けられており、そのクラスのオブジェクトを呼び出す必要があるため、オブジェクト参照が必須になります。 std::bind の 2 番目の引数はこのオブジェクト参照を提供し、メンバー関数が指定されたオブジェクトを操作できるようにします。例
次のコードを考えてみましょう。<code class="cpp">struct Foo { int value; void f(int n) { std::cout << "f(" << this->value << ", " << n << ")\n"; } }; int main() { Foo foo{10}; auto f_bound = std::bind(&Foo::f, &foo, _1); f_bound(20); // Output: f(10, 20) }</code>この例では、 f_bound は、受け取った追加の引数を使用して foo オブジェクトの f メンバー関数を呼び出す呼び出し可能オブジェクトです。したがって、 f_bound(20) を呼び出すと、「f(10, 20)」を出力する foo.f(20) を呼び出すことと同じになります。
以上がstd::bind はメンバー関数をどのように処理しますか?また、オブジェクト参照が必要なのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。