Können wir die Parameter- und Rückgabetypen einer Lambda-Funktion in C bestimmen? Wenn ja, wie?
Diese Anfrage basiert auf der Notwendigkeit, die Typen innerhalb einer Funktionsvorlage zu kennen, die ein Lambda als Argument verwendet.
Die Lösung liegt bei der Verwendung von function_traits, wie durch diesen Code demonstriert:
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; }
Diese Implementierung nutzt den Decltype des Operator() des Lambda zur Ableitung seine Parametertypen.
Es ist wichtig zu beachten, dass diese Technik bei generischen Lambdas wie [](auto x) {} unwirksam ist.
Das obige ist der detaillierte Inhalt vonWie können wir die Parameter- und Rückgabetypen einer C-Lambda-Funktion bestimmen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!