以下代码:
auto F(int count) -> decltype([](int m) { return 0; })
{
return [](int m) { return 0; };
}
g ++ 4.5给出错误:
test1.cpp:1:32: error: expected primary-expression before 'int'
test1.cpp:1:32: error: expected ')' before 'int'
有什么问题?从函数返回lambda的正确方法是什么?
答案 0 :(得分:44)
除非通过实际创建该对象,否则不能使用lambda表达式 - 这使得无法像decltype那样传递类型推导。
当然,具有讽刺意味的是,lambda返回规则使得你可以从lambdas返回lambdas,因为在某些情况下不必指定返回类型。
你只有两个选择 - 返回一个多态容器,如std::function
,或者让F本身成为一个真正的lambda。
auto F = [](int count) { return [](int m) { return 0; }; };
答案 1 :(得分:9)
#include <functional>
std::function<int(int)> F(int count)
{
return [](int m) { return 0; };
}
答案 2 :(得分:4)
使用C ++ 14,现在可以实现:
auto F(int count)
{
return [](int m) { return 0; };
}