Menentukan Penuding kepada Fungsi Terlebih Beban
Dalam alam C , tidak jarang terdapat fungsi terlampau beban yang berkongsi nama yang sama tetapi berbeza dalam parameter input mereka. Ini memberikan cabaran apabila cuba menghantar fungsi tersebut sebagai argumen kepada algoritma generik seperti std::for_each().
Fungsi Terlebih Beban Bersarang Dalam Kelas
Pertimbangkan perkara berikut contoh, apabila beban berlebihan berlaku dalam kelas:
class A { public: void f(char c); void f(int i); void scan(const std::string& s) { std::for_each(s.begin(), s.end(), f); } };
Di sini, memanggil kaedah scan() dengan rentetan menyebabkan pengkompil tidak pasti tentang pelaksanaan f yang hendak digunakan. Secara lalai, f() akan mengambil aksara sebagai hujah. Walau bagaimanapun, pengguna mungkin berhasrat untuk menggunakan lebihan beban yang menerima integer.
Tugas Penunjuk Eksplisit
Untuk menyelesaikan kekaburan ini, adalah mungkin untuk menentukan lebihan yang diingini secara eksplisit menggunakan static_cast<>():
// Uses the void f(char c); overload std::for_each(s.begin(), s.end(), static_cast<void (*)(char)>(f)); // Uses the void f(int i); overload std::for_each(s.begin(), s.end(), static_cast<void (*)(int)>(f));
Dengan menghantar penunjuk fungsi kepada jenis yang sesuai, anda boleh secara jelas menunjukkan kepada pengkompil yang lebihan beban harus dipanggil.
Kaedah Alternatif Menggunakan Penunjuk Fungsi
Pendekatan lain ialah mengisytiharkan fungsi penunjuk secara eksplisit:
// The compiler will figure out which f to use according to // the function pointer declaration. void (*fpc)(char) = &f; std::for_each(s.begin(), s.end(), fpc); // Uses the void f(char c); overload void (*fpi)(int) = &f; std::for_each(s.begin(), s.end(), fpi); // Uses the void f(int i); overload
Dengan mencipta penunjuk fungsi dengan tandatangan tertentu, pengkompil boleh menentukan secara automatik lebihan beban yang betul untuk digunakan.
Pengendalian Fungsi Ahli
Jika fungsi terlebih beban ialah fungsi ahli, pendekatan yang berbeza diperlukan. Pertimbangkan untuk menggunakan templat mem_fun atau rujuk sumber tambahan, seperti artikel Dr. Dobb yang dipautkan dalam jawapan yang disediakan.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menentukan Penunjuk kepada Fungsi Terlebih Beban dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!