std::bind, alat serba boleh dalam C , membenarkan mencipta fungsi terikat untuk pemanggilan kemudian. Memahami penggunaannya dengan fungsi ahli boleh menjadi mencabar, tetapi perbincangan ini bertujuan untuk menjelaskan selok-belok yang terlibat.
Apabila mengisytiharkan pengikatan untuk ahli fungsi, hujah pertama std::bind bukanlah rujukan kepada fungsi ahli tetapi sebaliknya penunjuk kepadanya. Ini kerana fungsi dan ahli data sama-sama mereput menjadi penunjuk apabila diluluskan sebagai argumen.
Argumen kedua std::bind apabila berurusan dengan fungsi ahli menentukan objek atau penunjuk ke objek yang akan digunakan untuk memanggil fungsi ahli. Ini adalah perlu kerana fungsi ahli mempunyai penunjuk ini tersirat yang menunjuk kepada objek yang dimilikinya.
Secara dalaman, std::bind muncul untuk mencipta objek boleh panggil yang membalut penuding kepada fungsi ahli. Apabila memanggil fungsi terikat ini, objek yang ditentukan digunakan sebagai penunjuk ini.
Tidak seperti penuding fungsi, yang bebas daripada sebarang objek tertentu, penunjuk fungsi ahli terikat dengan kelas yang mereka miliki tetapi boleh digunakan dengan mana-mana objek kelas itu. std::bind menyokong ini dengan memerlukan penunjuk objek sebagai hujah kedua apabila berurusan dengan fungsi ahli.
Pertimbangkan kod berikut:
<code class="cpp">struct Foo { void print_sum(int n1, int n2) { std::cout << n1 + n2 << '\n'; } }; Foo foo; auto f = std::bind(&Foo::print_sum, &foo, 95, _1);</code>
Dalam ini contoh, hujah pertama untuk std::bind ialah &Foo::print_sum, yang merupakan penunjuk kepada fungsi ahli print_sum dalam kelas Foo. Hujah kedua ialah &foo, iaitu penunjuk kepada objek foo. Apabila menggunakan f, &foo digunakan sebagai penunjuk ini, membenarkan print_sum dipanggil dengan konteks yang betul pada objek foo.
Atas ialah kandungan terperinci Bagaimanakah `std::bind` berfungsi dengan fungsi ahli dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!