Dalam C 14, pengenalan lambda generik membawa dimensi baharu fleksibiliti dalam kod. Mereka menggunakan kuasa auto sebagai jenis hujah, tetapi adakah mekanismenya berakar umbi dalam templat C atau pemadaman jenis seperti Java?
Templat C memanfaatkan lambda generik untuk menentukan jenis penutupan yang mempunyai operator panggilan templat. Ini berbeza daripada operator panggilan bukan templat dalam C 11 lambdas. Pertimbangkan contoh:
auto glambda = [](auto a) { return a; };
Di sini, jenis penutupan glambda ditakrifkan seperti berikut:
class /* unnamed */ { public: template<typename T> T operator () (T a) const { return a; } };
Perkongsian lambda generik persamaan dengan templat C, di mana pengkompil menjana fungsi yang berbeza untuk jenis hujah yang berbeza. Walau bagaimanapun, terdapat perbezaan penting: lambda generik tidak mencipta berbilang contoh fungsi pada masa penyusunan. Sebaliknya, mereka menggunakan fungsi tunggal yang tidak dinamakan yang mentakrifkan operator panggilan templat.
Berbeza dengan generik Java, yang menggunakan pemadaman jenis, lambda generik mengekalkan maklumat jenis. Parameter templat jenis dalam operator panggilan membenarkan lambda menyimpulkan dan memanipulasi jenis argumen sebenar semasa masa jalan.
Lambda generik dalam C 14 ialah alat yang berkuasa untuk menulis kod ringkas dan fleksibel . Walaupun mereka mendapat inspirasi daripada templat C, mekanismenya adalah berbeza, menawarkan gabungan unik gelagat masa kompilasi dan masa jalan.
Atas ialah kandungan terperinci Adakah C 14 Generik Lambdas Berdasarkan Templat atau Jenis Pemadaman?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!