我们能否确定 C 中 lambda 函数的参数和返回类型?如果是这样,如何实现?
此查询是由于需要了解以 lambda 作为参数的函数模板中的类型而驱动的。
解决方案在于在使用 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; }
此实现利用了 lambda 的 decltype
需要注意的是,此技术对于像 [](auto x) {} 这样的通用 lambda 无效。
以上是如何确定 C Lambda 函数的参数和返回类型?的详细内容。更多信息请关注PHP中文网其他相关文章!