Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Menentukan Parameter dan Jenis Pengembalian Lambda C pada Masa Kompilasi?
Menentukan Parameter dan Jenis Pengembalian Lambda
Memandangkan lambda, adalah mungkin untuk mengekstrak jenis parameter dan jenis kembali menggunakan compile -teknik masa. Ini boleh dicapai melalui penggunaan ciri lambda, yang menyediakan cara untuk mengakses maklumat tentang lambda pada masa penyusunan.
Untuk menentukan ciri lambda, kami boleh memanfaatkan pengendali decltype untuk memeriksa tandatangan pengendali lambda( ). Dengan mengkhususkan templat pada jenis ini, kami boleh mendapatkan semula parameter dan jenis pengembalian.
Sebagai contoh, kod berikut melaksanakan ciri lambda:
template<typename T> struct lambda_traits : public lambda_traits<decltype(&T::operator())> { }; template<typename ReturnType, typename... Args> struct lambda_traits<ReturnType(Args...)> { using param_type = Args...; using return_type = ReturnType; };
Dengan ciri ini, kami boleh mendapatkan semula parameter dan jenis pulangan lambda seperti berikut:
auto lambda = [](int i) { return long(i * 10); }; lambda_traits<decltype(lambda)>::param_type i; // i should be int lambda_traits<decltype(lambda)>::return_type l; // l should be long
Pendekatan ini membolehkan kami membina secara dinamik std::function objects daripada lambdas, seperti yang ditunjukkan dalam kod berikut:
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 }
Perhatikan bahawa pendekatan ini gagal untuk lambda generik, seperti [](auto x) {}, disebabkan oleh ketidakupayaan untuk menentukan jenis yang tepat pada masa penyusunan.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menentukan Parameter dan Jenis Pengembalian Lambda C pada Masa Kompilasi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!