简介:
Lambda 表达式提供了一种简洁便捷的方法在 C 中定义匿名函数。然而,在使用可变参数模板时,传递 lambda 可能具有挑战性。本文探讨了一种使用模板元编程将通用 lambda 转换为 std::function 的技术。
基于模板的 std::function 转换:
启用以下转换带有 std::function 任意参数的 lambda,我们不能依赖模板类型推导。相反,我们使用标识类型来包装 lambda 函数并保留其类型信息:
template <typename T> struct identity { typedef T type; };
使用此标识类型,我们创建一个接受包装的 lambda 作为参数的通用函数:
template <typename... T> void func(typename identity<std::function<void(T...)>>::type f, T... values) { f(values...); }
用法示例:
虽然这种方法不需要显式指定模板参数,它涉及向函数传递附加参数。下面是一个示例:
func([](int x, int y, int z) { std::cout << (x*y*z) << std::endl; }, 3, 6, 8);
结论:
虽然此解决方案解决了在可变参数模板上下文中将通用 lambda 转换为 std::function 的挑战,但它确实需要传递额外的参数。或者,可以使用显式模板参数规范或考虑其他方法,例如使用函数指针或函数对象包装器。
以上是如何使用 C 中的模板将通用 Lambda 转换为 std::functions ?的详细内容。更多信息请关注PHP中文网其他相关文章!