lambdas不使用功能接受std ::功能

Lambdas not working with function accepting std::function

本文关键字:功能 能接受 std lambdas      更新时间:2023-10-16

为什么这不与lambdas一起使用?它只有在调用我想要的函数之前将lambda对std ::函数进行cand ::函数时起作用。当我将lambda构建到位或将lambda分配到自动时不起作用。

#include <functional>
template <typename R>
R foo (std::function<R()> fun)
{
    puts(__PRETTY_FUNCTION__);
}
int main()
{
    std::function<int()> lambda = []{ return 1; };
    foo (lambda); // --> OK
    foo ([]() -> int { return 1; } ); // --> ERROR
    auto lambda2 = []{ return 1; };
    foo (lambda2); // --> ERROR
}

问题是<R>无法从lambda中推论。实际上,R有很多类型,因此std::function可以容纳您的lambda。

当提供的参数为 std::function<int()>时,可以将R琐碎地推导为int()。但是Lambda有自己的独特类型。不是std::function

您需要将模板参数添加到foo

foo<int> ([]() -> int { return 1; } ); // --> OK
foo<int> (lambda2); // --> OK