Menentukan Parameter dan Jenis Pengembalian Ungkapan Lambda
Memandangkan ungkapan lambda, sukar untuk memastikan parameter dan jenis pengembaliannya. Artikel ini meneroka cara mengekstrak maklumat ini menggunakan ciri lambda.
Dalam C 11, ungkapan lambda diperkenalkan dan boleh digunakan dalam pelbagai senario. Satu kes penggunaan yang berpotensi adalah untuk menghantar lambda sebagai argumen kepada templat berfungsi, tetapi untuk berjaya melakukannya, mengetahui parameter lambda dan jenis pengembalian adalah penting.
Pada mulanya, percubaan untuk menggunakan std::function untuk mewakili ungkapan lambda yang ditemui kesilapan. Walau bagaimanapun, pengenalan lambda_traits menyediakan penyelesaian yang lebih mantap. Menggunakan decltype operator lambda(), lambda_traits boleh menentukan jenis parameter.
Coretan kod berikut menggambarkan cara ciri lambda boleh digunakan untuk mengekstrak maklumat jenis daripada ungkapan lambda:
template <typename TLambda> void f(TLambda lambda) { typedef typename lambda_traits<TLambda>::param_type P; typedef typename lambda_traits<TLambda>::return_type R; std::function<R(P)> fun = lambda; // Construct the std::function object }
Dalam senario contoh ini, templat fungsi f menerima lambda sebagai hujah dan menggunakan ciri lambda untuk menyimpulkan parameternya dan jenis pengembalian.
Untuk lambda generik yang tidak menyatakan jenis eksplisit, seperti [](auto x) {}, pendekatan ini tidak akan berfungsi. Namun begitu, ciri lambda terbukti berkesan untuk lambda dengan parameter yang ditentukan dan jenis pulangan.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menentukan Parameter dan Jenis Pengembalian Ungkapan C Lambda?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!