Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Menentukan Penunjuk kepada Fungsi Terlebih Beban dalam C?

Bagaimanakah Saya Boleh Menentukan Penunjuk kepada Fungsi Terlebih Beban dalam C?

Barbara Streisand
Lepaskan: 2024-12-30 05:03:08
asal
914 orang telah melayarinya

How Can I Specify a Pointer to an Overloaded Function in C  ?

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

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

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

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!

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