Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Menyelesaikan Kekaburan Apabila Menggunakan Penunjuk Fungsi Terlebih Beban dalam C?

Bagaimanakah Saya Boleh Menyelesaikan Kekaburan Apabila Menggunakan Penunjuk Fungsi Terlebih Beban dalam C?

Mary-Kate Olsen
Lepaskan: 2024-12-17 11:16:24
asal
336 orang telah melayarinya

How Can I Resolve Ambiguity When Using Overloaded Function Pointers in C  ?

Memahami Penunjuk Fungsi Terlebih Beban

Dalam C, fungsi terlampau beban boleh menimbulkan kesamaran apabila bekerja dengan penunjuk fungsi. Kekaburan ini berlaku kerana pengkompil tidak boleh secara automatik menentukan beban lampau yang harus digunakan apabila dibentangkan dengan pengisytiharan penuding fungsi. Untuk menjelaskan penetapan ini dan menentukan beban berlebihan yang dimaksudkan, beberapa kaedah boleh digunakan.

Penyelesaian 1: Menggunakan static_cast<>()

Satu pendekatan ialah menggunakan static_cast<>() operator cast. Operator ini membenarkan anda menghantar penuding fungsi secara eksplisit ke tandatangan beban yang diingini. Sebagai contoh, dalam kod di bawah, penuding fungsi dibuang ke beban lampau yang menerima hujah aksara:

std::for_each(s.begin(), s.end(), static_cast<void (*)(char)>(&f));
Salin selepas log masuk

Penyelesaian 2: Pengisytiharan Penunjuk Fungsi

Sebagai alternatif , anda boleh menggunakan pengisytiharan penuding fungsi untuk menentukan beban berlebihan yang dimaksudkan. Pengkompil kemudiannya akan membuat kesimpulan lebihan beban yang sesuai berdasarkan pengisytiharan. Contohnya:

void (*fpc)(char) = &f;
std::for_each(s.begin(), s.end(), fpc); // Uses the void f(char c); overload
Salin selepas log masuk

Pertimbangan Fungsi Ahli

Jika fungsi terlebih beban ialah fungsi ahli, anda perlu menggunakan templat fungsi mem_fun daripada

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menyelesaikan Kekaburan Apabila Menggunakan Penunjuk Fungsi Terlebih Beban 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