Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Kita Boleh Menentukan Parameter dan Jenis Pengembalian Fungsi C Lambda?
Bolehkah kita menentukan parameter dan jenis pengembalian fungsi lambda dalam C ? Jika ya, bagaimana?
Siasatan ini didorong oleh keperluan untuk mengetahui jenis dalam templat fungsi yang mengambil lambda sebagai hujah.
Penyelesaian terletak dalam menggunakan function_traits, seperti yang ditunjukkan oleh kod ini:
template <typename T> struct function_traits : public function_traits<decltype(&T::operator())> {}; template <typename ClassType, typename ReturnType, typename... Args> struct function_traits<ReturnType(ClassType::*)(Args...) const> { enum { arity = sizeof...(Args) }; typedef ReturnType result_type; template <size_t i> struct arg { typedef typename std::tuple_element<i, std::tuple<Args...>>::type type; }; }; // Example usage int main() { auto lambda = [](int i) { return long(i * 10); }; typedef function_traits<decltype(lambda)> traits; static_assert(std::is_same<long, traits::result_type>::value, "err"); static_assert(std::is_same<int, traits::arg<0>::type>::value, "err"); return 0; }
Pelaksanaan ini memanfaatkan decltype operator() lambda untuk memperoleh jenis parameternya.
Adalah penting untuk ambil perhatian bahawa teknik ini tidak berkesan dengan lambda generik seperti [](auto x) {}.
Atas ialah kandungan terperinci Bagaimanakah Kita Boleh Menentukan Parameter dan Jenis Pengembalian Fungsi C Lambda?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!