Artikel ini menangani cabaran menukar ungkapan lambda parameter dan jenis sewenang-wenangnya ke dalam objek fungsi std:: menggunakan templat. Walaupun percubaan berulang kali, penulis menghadapi halangan dengan pendekatan langsung dan berasaskan templat.
Motivasi di sebalik penukaran ini berpunca daripada pelaksanaan kari dalam C melalui templat variadic. Walau bagaimanapun, teknik ini menjadi bermasalah apabila cuba menghantar lambda sebagai hujah kepada fungsi variadik.
Cabaran utama terletak pada ketidakupayaan potongan jenis templat untuk membuat kesimpulan hujah templat yang betul untuk fungsi std:: hanya berdasarkan ungkapan lambda. Ini kerana potongan jenis templat tidak mempertimbangkan penukaran jenis.
Satu penyelesaian melibatkan membungkus hujah lambda dalam jenis identiti. Ini membolehkan pengkompil mengabaikan kebergantungan lambda semasa potongan jenis. Walau bagaimanapun, pendekatan ini memerlukan parameter tambahan, yang mungkin tidak sejajar dengan kes penggunaan yang diingini.
Dalam situasi di mana spesifikasi parameter templat eksplisit tidak diingini dan tiada hujah boleh ditolak lain tersedia, ia menjadi mustahil bagi pengkompil untuk menyimpulkan jenis templat fungsi std::function yang dikehendaki. Had ini menghalang penukaran langsung lambda kepada objek std::function tanpa spesifikasi parameter eksplisit atau argumen tambahan.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menukar Lambdas kepada std::function Menggunakan Templat dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!