Rumah > Artikel > pembangunan bahagian belakang > Bila Memilih: std::bind vs. Lambdas dalam C 0x?
Banding dan Kontras: std::bind dan Lambdas dalam C 0x
Dalam C 0x, pengaturcara berhadapan dengan dua pilihan untuk menangkap a fungsi: std::bind dan lambdas. Walaupun kedua-duanya mempunyai tujuan yang berbeza, ia bertindih dalam beberapa aplikasi. Mari kita mendalami kekuatan dan batasan setiap pendekatan, mengambil contoh kefungsian bersilang.
Pertimbangkan tugas untuk mencipta fungsi membaling dadu. Menggunakan lambda, kita boleh menyatakan ini sebagai:
<code class="cpp">auto dice = [&]() { return distribution(engine); };</code>
Sebagai alternatif, menggunakan std::bind, kita boleh menulis:
<code class="cpp">auto dice = bind(distribution, engine);</code>
Monomorphic vs. Polymorphic
Satu perbezaan asas terletak pada jenis tingkah laku mereka. Lambdas adalah monomorfik, bermakna mereka mempunyai jenis hujah tetap yang ditentukan pada masa penyusunan. Kekangan ini mengehadkan fleksibiliti lambda berbanding rakan bind mereka.
Sebagai contoh, pertimbangkan fungsi yang mencetak dua hujah:
<code class="cpp">auto f = [](auto a, auto b) { cout << a << ' ' << b; }
Menggunakan lambda ini dengan jenis parameter yang berbeza akan menghasilkan ralat penyusun. Sebaliknya, std::bind membenarkan tingkah laku polimorfik, membolehkan fungsi terikat kepada argumen pelbagai jenis:
<code class="cpp">struct foo { template <typename A, typename B> void operator()(A a, B b) { cout << a << ' ' << b; } }; auto f = bind(foo(), _1, _2);</code>
Dengan menangguhkan potongan jenis sehingga fungsi digunakan, std::bind menawarkan fleksibiliti yang lebih besar untuk mengendalikan pelbagai jenis input.
Atas ialah kandungan terperinci Bila Memilih: std::bind vs. Lambdas dalam C 0x?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!