Rumah > Artikel > pembangunan bahagian belakang > std::function vs. Penunjuk Fungsi: Bilakah Anda Harus Memilih Apa?
Gunakan fungsi std::, Melainkan Ada Sebab Memaksa Tidak Untuk
Apabila bekerja dengan fungsi panggil balik dalam C , pilihan antara menggunakan Penunjuk fungsi gaya C dan fungsi std::yang lebih baharu boleh menjadi masalah perdebatan. Mari kita periksa kebaikan dan keburukan setiap pilihan.
Penunjuk Fungsi Gaya-C:
std::function:
Bila Menggunakan std::function:
Dalam kebanyakan kes, std::function ialah pilihan pilihan. Ia lebih fleksibel dan kalis masa hadapan daripada penunjuk fungsi. Melainkan terdapat kebimbangan prestasi khusus, secara amnya disyorkan untuk menggunakan fungsi std:: untuk menyampaikan panggilan balik.
Bila Menggunakan Penunjuk Fungsi:
Jika prestasi adalah kritikal pertimbangan dan fungsi panggil balik tidak perlu menangkap sebarang pembolehubah konteks, maka penuding fungsi mungkin merupakan pilihan yang lebih baik. Walau bagaimanapun, senario ini agak jarang berlaku.
Pilihan Ketiga: Parameter Templat
Pertimbangkan untuk menggunakan parameter templat jika anda mahu fungsi panggil balik menjadi sebarang objek boleh panggil. Pendekatan ini memberikan fleksibiliti tetapi memerlukan fungsi luar untuk dilaksanakan dalam pengepala.
Jadual Ringkasan:
Feature | Function Pointer | std::function | Template Parameter |
---|---|---|---|
Can capture context | No | Yes | Yes |
Call overhead | None | Small | None |
Can be inlined | No | No | Yes |
Can be stored in class member | Yes | Yes | No |
Implemented outside of header | Yes | Yes | No |
Supported without C 11 standard | Yes | No | Yes |
Readability | Poor | Good | Fair |
Kesimpulan:
Secara amnya, kelebihan std::function melebihi kelebihan penunjuk fungsi. Ia lebih fleksibel, kalis masa hadapan dan boleh dibaca. Gunakan penunjuk fungsi hanya jika terdapat kebimbangan prestasi tertentu atau jika fungsi panggil balik tidak perlu menangkap sebarang pembolehubah konteks.
Atas ialah kandungan terperinci std::function vs. Penunjuk Fungsi: Bilakah Anda Harus Memilih Apa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!