Bagaimanakah std::bind mengendalikan fungsi ahli, dan mengapa rujukan objek diperlukan?

DDD
Lepaskan: 2024-10-31 23:47:29
asal
522 orang telah melayarinya

How does std::bind handle member functions, and why is an object reference required?

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

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!

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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan