确定 Lambda 表达式的参数和返回类型
给定 lambda 表达式,确定其参数和返回类型可能具有挑战性。本文探讨了如何使用 lambda 特征提取此信息。
在 C 11 中,引入了 lambda 表达式,并且可以在各种场景中使用。一个潜在的用例是将 lambda 作为参数传递给函数模板,但要成功做到这一点,了解 lambda 的参数和返回类型至关重要。
最初,尝试使用 std::function 来表示遇到的 lambda 表达式错误。然而,lambda_traits 的引入提供了更强大的解决方案。使用 lambda 运算符() 的 decltype,lambda_traits 可以确定参数类型。
以下代码片段说明了如何利用 lambda 特征从 lambda 表达式中提取类型信息:
template <typename TLambda> void f(TLambda lambda) { typedef typename lambda_traits<TLambda>::param_type P; typedef typename lambda_traits<TLambda>::return_type R; std::function<R(P)> fun = lambda; // Construct the std::function object }
在此示例场景中,f 函数模板接受 lambda 作为参数,并利用 lambda 特征来推导其参数并返回types.
对于不指定显式类型的泛型 lambda,例如 [](auto x) {},此方法不起作用。尽管如此,事实证明,lambda 特征对于具有已定义参数和返回类型的 lambda 是有效的。
以上是如何确定C Lambda表达式的参数和返回类型?的详细内容。更多信息请关注PHP中文网其他相关文章!