Maison >développement back-end >C++ >Comment pouvons-nous déterminer les types de paramètres et de retour d'une fonction C Lambda ?
Pouvons-nous déterminer les types de paramètres et de retour d'une fonction lambda en C ? Si oui, comment ?
Cette enquête est motivée par la nécessité de connaître les types au sein d'un modèle de fonction qui prend un lambda comme argument.
La solution réside en employant function_traits, comme le démontre ce code :
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; }
Cette implémentation exploite le decltype de l'opérateur lambda() pour dériver ses types de paramètres.
Il est important de noter que cette technique est inefficace avec des lambdas génériques comme [](auto x) {}.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!