Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Lambdas Generik C 14 Mencapai Gelagat Jenis-Generik?

Bagaimanakah Lambdas Generik C 14 Mencapai Gelagat Jenis-Generik?

DDD
DDDasal
2024-12-10 04:59:08967semak imbas

How Do C  14 Generic Lambdas Achieve Type-Generic Behavior?

Lambda Generik dalam C 14

Dalam C 14, lambda generik membenarkan mentakrifkan lambda dengan auto sebagai jenis argumen, membolehkan gelagat jenis-generik . Memahami cara ia berfungsi memberi penerangan tentang mekanisme asasnya.

Operator Panggilan Bertemplat

Lambda generik mentakrifkan jenis penutupan dengan operator panggilan bertemplat dan bukannya bukan templat seperti C 11 lambdas. Ini bermakna apabila auto muncul dalam senarai parameter, pengkompil mencipta templat fungsi untuk operator panggilan.

Contoh:

auto glambda = [](auto a) { return a; };

Lambda di atas mencipta contoh jenis berikut:

class /* unnamed */
{
public:
    template<typename T>
    T operator () (T a) const { return a; }
};

Jenis Pemadaman lwn. Templat Polimorfisme

Lambda generik lebih dekat dengan generik Java, yang menggunakan pemadaman jenis. Tidak seperti templat C, yang menjana berbilang fungsi dengan jenis yang berbeza, lambda generik mencipta satu fungsi dengan operator panggilan pemadam jenis.

Senarai Parameter Jenis

Lambda generik templat operator panggilan termasuk senarai parameter templat untuk setiap kejadian auto dalam pengisytiharan parameter. Jenis setiap parameter templat sepadan dengan jenis pembolehubah yang sepadan.

Kesimpulan:

Lambda generik dalam C 14 membolehkan pengaturcaraan jenis-generik dengan mentakrifkan ungkapan lambda dengan operator panggilan templat. Ini menyediakan cara ringkas untuk mencipta fungsi pemadam jenis yang serupa dengan generik Java.

Atas ialah kandungan terperinci Bagaimanakah Lambdas Generik C 14 Mencapai Gelagat Jenis-Generik?. 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