本文解决了转换 lambda 表达式的挑战使用模板将任意参数和类型放入 std::function 对象中。尽管进行了多次尝试,作者在直接方法和基于模板的方法方面都遇到了障碍。
这种转换背后的动机源于通过可变参数模板在 C 中实现柯里化。然而,当尝试将 lambda 作为参数传递给可变参数函数时,这种技术就会出现问题。
主要挑战在于模板类型推导无法进行推导仅基于 lambda 表达式的 std::function 的正确模板参数。这是因为模板类型推导不考虑类型转换。
一种解决方法是将 lambda 参数包装在身份类型中。这允许编译器在类型推导期间忽略 lambda 的依赖性。但是,这种方法需要额外的参数,这可能与所需的用例不符。
在不希望显式模板参数规范且没有其他可扣除参数可用的情况下,它编译器不可能推断出所需的 std::function 模板类型。此限制阻止在没有显式参数规范或附加参数的情况下将 lambda 直接转换为 std::function 对象。
以上是如何使用 C 中的模板将 Lambda 转换为 std::function ?的详细内容。更多信息请关注PHP中文网其他相关文章!