Rumah > Artikel > pembangunan bahagian belakang > std::function vs. Penunjuk Fungsi: Bilakah Anda Harus Pilih Setiap dalam C ?
std::function vs. Fungsi Penunjuk dalam C : Mana yang Perlu Dipilih dan Bila?
Apabila ia datang untuk mentakrifkan fungsi panggil balik dalam C , anda mempunyai dua pilihan utama: penunjuk fungsi gaya C dan fungsi std::. Pilihan ini boleh memberi kesan ketara kepada keupayaan dan kecekapan kod anda.
Penunjuk Fungsi Gaya-C
Penunjuk fungsi telah wujud sejak sekian lama dan masih digunakan secara meluas. Mereka menawarkan kesederhanaan untuk menyimpan penuding ke fungsi:
void (*callbackFunc)(int);
Walau bagaimanapun, mereka datang dengan had yang ketara:
Ketiadaan Tangkapan Konteks: Penunjuk fungsi tidak boleh mengekalkan konteks (cth., pembolehubah yang ditangkap) fungsi induk. Ini bermakna anda tidak boleh dengan mudah menghantar fungsi lambda atau memanggil fungsi ahli objek sebagai panggilan balik.
std::function
std::function (diperkenalkan dalam C 11) ialah direka untuk mengatasi batasan ini. Ia menyediakan cara generik yang selamat jenis untuk menyimpan dan menghantar fungsi:
std::function< void(int) > callbackFunc;
Kelebihan std::function:
Kelemahan std::function:
Parameter Templat
Pilihan ketiga, terutamanya sesuai untuk fungsi kecil, ialah menggunakan parameter templat jenis objek boleh panggil:
template <typename CallbackFunction> void myFunction(..., CallbackFunction && callback) { ... callback(...); ... }
Kelebihan Parameter Templat:
Kelemahan Parameter Templat:
Jadual Ringkasan
Untuk meringkaskan, jadual berikut menggariskan perbezaan utama antara pilihan ini:
Feature | Function Pointer | std::function | Template Parameter |
---|---|---|---|
Context Capture | No | Yes | Yes |
Call Overhead | No | Yes | No |
Inlining | No | No | Yes |
Class Member Storage | Yes | Yes | No |
C 11 Support | Yes | No | Yes |
Readability | Less Readable | More Readable | Somewhat Readable |
Dalam kebanyakan kes, melainkan anda mempunyai keperluan khusus untuk penunjuk fungsi atau parameter templat, std::function ialah pilihan pilihan kerana fleksibiliti, keupayaan menangkap konteks dan keserasian universal.
Atas ialah kandungan terperinci std::function vs. Penunjuk Fungsi: Bilakah Anda Harus Pilih Setiap dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!