为什么不使用lambdas?它只在我调用我想要的函数之前将lambda转换为std :: function时才起作用。当我构建lambda时或将lambda指定为auto时不起作用。Lambdas不能使用函数接受std :: function
#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
}
你应该真的*从你的'foo'函数返回一些东西。没有返回任何东西,就像你在MCVE中做的那样,导致[* undefined behavior *](http://en.cppreference.com/w/cpp/language/ub)。 –
你是否需要*函数参数是一个'std :: function'对象?它不能仅仅是一个模板吗?像例如'template auto foo(F fun) - > decltype(fun()){...}'。 –
不,因为我需要返回lambda返回的类型。据我所知,这不是特质。 – YotKay