Memahami std::bind dengan Fungsi Ahli
std::bind ialah alat berkuasa dalam C untuk mencipta objek boleh panggil. Apabila bekerja dengan fungsi ahli, ia memperkenalkan beberapa aspek unik yang boleh mengelirukan. Mari kita terokai cara std::bind mentafsir dan menggunakan fungsi ahli.
Argumen Pertama: Mengapa Penunjuk?
Argumen pertama untuk std::bind ialah boleh panggil objek, yang boleh menjadi fungsi, lambda, atau bahkan fungsi ahli. Apabila menggunakan fungsi ahli, adalah penting untuk memahami bahawa hujah pertama adalah penunjuk kepada fungsi ahli tersebut. Ini kerana semua fungsi ahli bukan statik disimpan sebagai penunjuk dalam objek.
Untuk mendapatkan penunjuk kepada fungsi ahli, operator & digunakan. Sebagai contoh, dalam kod berikut:
Foo foo; auto f = std::bind(&Foo::print_sum, &foo, 95, _1);
&Foo::print_sum mengembalikan penunjuk kepada fungsi ahli print_sum dalam kelas Foo.
Argumen Kedua: Merujuk Objek
Argumen kedua untuk std::bind apabila menggunakan fungsi ahli ialah rujukan kepada objek yang dimiliki oleh fungsi ahli. Ini kerana fungsi ahli memerlukan akses kepada objek yang dikaitkan dengannya.
Dalam contoh di atas, f perlu boleh mengakses objek foo. Dengan menyediakan rujukan &foo sebagai hujah kedua, std::bind memastikan bahawa sebarang panggilan yang dibuat kepada f akan terikat pada objek foo.
std::bind's Internal Handling
Secara dalaman, std::bind menganalisis hujah pertama dan menentukan sama ada ia penunjuk kepada fungsi ahli. Jika ya, ia menukarnya menjadi objek boleh panggil yang sesuai menggunakan std::mem_fn() atau mekanisme yang serupa. Objek boleh panggil ini merangkum kedua-dua penunjuk kepada fungsi ahli dan rujukan kepada objek.
Satu Contoh
Untuk menggambarkan dengan lebih baik, pertimbangkan kod berikut:
struct Foo { void print(int n) { std::cout << n << '\n'; } }; Foo foo; std::bind(&Foo::print, &foo, 42)();
Dalam contoh ini, std::bind mencipta objek boleh panggil yang menggabungkan fungsi ahli cetakan dan rujukan kepada objek foo. Apabila objek boleh panggil ini dipanggil, ia secara berkesan memanggil foo.print(42).
Kesimpulan
Memahami cara std::bind berfungsi dengan fungsi ahli adalah penting untuk berkesan menggunakan teknik ini. Ingat bahawa hujah pertama adalah penunjuk kepada fungsi ahli dan hujah kedua adalah rujukan kepada objek. std::bind mengendalikan hujah ini secara dalaman untuk mencipta objek boleh dipanggil yang menyediakan cara yang mudah untuk mengikat fungsi ahli kepada objek tertentu.
Atas ialah kandungan terperinci Bagaimanakah std::bind mengendalikan fungsi ahli dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!