首页 >后端开发 >C++ >如何确定 C Lambda 函数的参数和返回类型?

如何确定 C Lambda 函数的参数和返回类型?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-25 14:50:10587浏览

How Can We Determine the Parameter and Return Types of a C   Lambda Function?

发现 Lambda 的参数和返回类型

问题

我们能否确定 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn