Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah `std::bind` berfungsi dengan fungsi ahli dalam C ?

Bagaimanakah `std::bind` berfungsi dengan fungsi ahli dalam C ?

Barbara Streisand
Lepaskan: 2024-10-29 21:38:30
asal
824 orang telah melayarinya

How does `std::bind` work with member functions in C  ?

Memahami std::bind dengan Fungsi Ahli

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.

Hujah Pertama: Penunjuk, Bukan Rujukan

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: Objek atau Penunjuk

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.

Pelaksanaan Dalaman

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.

Mengapa Penunjuk kepada Objek?

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.

Contoh

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan