Rumah > Artikel > pembangunan bahagian belakang > Bagaimanakah std::bind mengendalikan fungsi ahli, dan mengapa rujukan objek diperlukan?
Bagaimana std::bind Berfungsi dengan Fungsi Ahli
Apabila menggunakan std::bind dengan fungsi kelas ahli, beberapa konsep utama akan dimainkan :
Argumen Pertama: Penunjuk
Dalam sintaks std::bind(&Foo::print_sum, &foo, 95, _1), argumen pertama ialah bukan rujukan kepada penuding fungsi, seperti yang mungkin diandaikan. Sebaliknya, ia adalah penunjuk yang mewakili fungsi ahli itu sendiri.
Argumen Kedua: Rujukan Objek
Argumen kedua, dalam kes ini &foo , ialah rujukan kepada objek kelas yang sesuai (Foo). Ini adalah perlu kerana fungsi ahli memerlukan contoh objek untuk beroperasi.
Cara std::bind Mengendalikan Fungsi Ahli
Secara dalaman, std::bind mengesan bahawa hujah pertama ialah penunjuk kepada fungsi ahli dan menukarnya menjadi objek boleh dipanggil menggunakan std::mem_fn. Objek boleh panggil ini mengekalkan penuding kepada fungsi ahli dan memerlukan contoh objek sebagai hujah pertamanya.
Keperluan untuk Rujukan Objek
Apabila mengikat pada fungsi ahli , rujukan objek menjadi penting kerana fungsi ahli dikaitkan dengan kelas tertentu dan memerlukan objek kelas itu digunakan. Argumen kedua untuk std::bind menyediakan rujukan objek ini, membenarkan fungsi ahli beroperasi pada objek yang ditentukan.
Contoh
Pertimbangkan kod berikut:
<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>
Dalam contoh ini, f_bound ialah objek boleh panggil yang memanggil fungsi ahli f pada objek foo dengan sebarang argumen tambahan yang diterimanya. Jadi, apabila kita memanggil f_bound(20), ia sama dengan memanggil foo.f(20), yang mencetak "f(10, 20)".
Atas ialah kandungan terperinci Bagaimanakah std::bind mengendalikan fungsi ahli, dan mengapa rujukan objek diperlukan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!