使用模板将 Lambda 转换为 std::function
在 C 中,使用模板将 lambda 函数转换为 std::function 可以是一项具有挑战性的任务。为了实现这一点,模板类型推导是必不可少的,但在某些情况下它可能会面临限制。
最初,尝试将 lambda 转换为 std::function 可能会由于缺少模板参数或候选匹配不匹配而失败。要解决此问题,请显式指定模板参数,如 std::function
要解决此问题,需要更细致的解决方案。虽然模板类型推导无法直接从 lambda 推断出 std::function 模板参数,但仍然可以通过提供额外的类型约束来引导。
考虑以下方法:将 lambda 函数包装在结构体恒等中
template <typename T> struct identity { typedef T type; }; template <typename... T> void func(typename identity<std::function<void(T...)>>::type f, T... values) { f(values...); }
int main() { func([](int x, int y, int z) { std::cout << (x*y*z) << std::endl; }, 3, 6, 8); return 0; }
以上是如何使用模板有效地将通用 C Lambda 转换为 std::function?的详细内容。更多信息请关注PHP中文网其他相关文章!