C에서 람다 함수의 매개변수와 반환 유형을 결정할 수 있나요? 그렇다면 어떻게?
이 문의는 람다를 인수로 사용하는 함수 템플릿 내의 유형을 알아야 하기 때문에 발생합니다.
해결책은 다음과 같습니다. 다음 코드에서 볼 수 있듯이 function_traits를 사용할 때:
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; }
이 구현은 람다의 decltype을 활용합니다. 연산자()를 사용하여 매개변수 유형을 파생시킵니다.
이 기술은 [](auto x) {}와 같은 일반 람다에는 효과가 없다는 점에 유의하는 것이 중요합니다.
위 내용은 C Lambda 함수의 매개변수와 반환 유형을 어떻게 결정할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!