Lambdas vs. Bind dalam C : Polimorfisme dan Kecekapan
Apabila membandingkan penggunaan C 0x lambdas dan std::bind untuk tugasan yang serupa , pilihan antara kedua-duanya boleh dipengaruhi oleh faktor seperti polimorfisme dan kecekapan.
Bind vs. Lambda secara Terperinci
Pertimbangkan contoh berikut di mana kedua-dua lambda dan bind digunakan untuk menjana nombor rawak menggunakan pengedaran dan enjin:
// Using lambda auto dice = [&]() { return distribution(engine); }; // Using bind auto dice = bind(distribution, engine);
Polymorphism
Tidak seperti lambdas, yang monomorfik (iaitu, mempunyai jenis tetap), std: :bind membenarkan tingkah laku polimorfik. Ini bermakna bind boleh digunakan untuk mencipta fungsi dengan jenis yang tidak diketahui, seperti yang ditunjukkan di bawah:
struct foo { typedef void result_type; template <typename A, typename B> void operator()(A a, B b) { cout << a << ' ' << b; } }; auto f = bind(foo(), _1, _2); f("test", 1.2f); // will print "test 1.2"
Dalam contoh ini, jenis a dan b disimpulkan pada masa jalan apabila f digunakan. Fleksibiliti ini tidak tersedia dengan lambda.
Kecekapan
Secara amnya, lambda cenderung lebih cekap daripada mengikat apabila pembolehubah yang ditangkap digunakan mengikut nilai. Ini kerana lambdas menangkap pembolehubah secara langsung, manakala bind mencipta objek penutupan yang merujuk pembolehubah yang ditangkap. Walau bagaimanapun, bind mungkin menawarkan kelebihan apabila pembolehubah yang ditangkap adalah besar atau apabila fungsi dipanggil dengan kerap.
Kesimpulan
Pilihan antara lambdas dan bind bergantung pada keperluan khusus daripada permohonan itu. Lambdas menyediakan polimorfisme dan cekap untuk menangkap pembolehubah kecil jenis nilai. Bind menawarkan fleksibiliti yang lebih besar dan mungkin lebih baik apabila berurusan dengan fungsi yang besar atau sering dipanggil.
Atas ialah kandungan terperinci Lambdas lwn. Bind dalam C : Bilakah Anda Harus Memilih Setiap Satu?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!