爲什麼不使用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