Lambda Generik dalam C 14: Menyelam Lebih Dalam
Kemunculan lambda generik dalam C 14 memperkenalkan ciri baru kepada ungkapan lambda, membolehkan untuk fungsi dengan jenis hujah yang disimpulkan secara automatik. Walau bagaimanapun, mekanisme kerja generik ini telah tertakluk kepada spekulasi.
Bertentangan dengan andaian awal, lambda generik tidak bergantung pada templat C untuk pelaksanaannya. Sebaliknya, mereka mengikuti pendekatan unik yang melibatkan operator panggilan templat untuk jenis penutupan lambda.
Sebagai contoh, ungkapan lambda generik:
auto glambda = [](auto a) { return a; };
menghasilkan jenis penutupan dengan yang berikut pengendali panggilan templat:
class /* unnamed */ { public: template <typename T> T operator () (T a) const { return a; } };
Pengendali panggilan templat berdasarkan parameter templat jenis ciptaan untuk setiap contoh auto dalam pengisytiharan parameter lambda. Parameter ini membolehkan jenis yang disimpulkan untuk berbeza-beza bagi setiap seruan lambda.
Pendekatan templat ini berbeza daripada templat C, yang menjana fungsi baharu untuk setiap jenis hujah unik. Sebaliknya, ia beroperasi lebih seperti generik Java, di mana pemadaman jenis asas membolehkan pelaksanaan yang cekap tanpa memerlukan penjanaan fungsi khusus.
Ringkasnya, lambda generik dalam C 14 memanfaatkan operator panggilan templat dan bukannya templat C tradisional. Pilihan reka bentuk ini memberikan keseimbangan antara kuasa ekspresif dan pengoptimuman, menyediakan cara yang mudah untuk bekerja dengan fungsi dengan jenis hujah yang disimpulkan secara automatik.
Atas ialah kandungan terperinci Bagaimanakah Lambdas Generik C 14 Mencapai Potongan Jenis Tanpa Templat Tradisional?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!