Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bila Memilih: std::bind vs. Lambdas dalam C 0x?

Bila Memilih: std::bind vs. Lambdas dalam C 0x?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-30 15:21:12967semak imbas

When to Choose: std::bind vs. Lambdas in 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!

Kenyataan:
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