HC4*_*ica 31 c++ lambda decltype c++11
对于以下代码:
auto F(int count) -> decltype([](int m) { return 0; })
{
return [](int m) { return 0; };
}
Run Code Online (Sandbox Code Playgroud)
g ++ 4.5给出错误:
test1.cpp:1:32: error: expected primary-expression before 'int'
test1.cpp:1:32: error: expected ')' before 'int'
Run Code Online (Sandbox Code Playgroud)
问题是什么?从函数返回lambda的正确方法是什么?
Pup*_*ppy 45
除了通过实际创建该对象之外,您不能使用lambda表达式 - 这使得无法像decltype那样传递类型推导.
具有讽刺意味的是,当然,lambda返回规则使得你可以从lambdas返回lambdas,因为在某些情况下不必指定返回类型.
你只有两个选择 - 返回一个多态容器,如std::function,或使F本身成为一个实际的lambda.
auto F = [](int count) { return [](int m) { return 0; }; };
Run Code Online (Sandbox Code Playgroud)
And*_*hko 10
这样的东西适合你的需求?
#include <functional>
std::function<int(int)> F(int count)
{
return [](int m) { return 0; };
}
Run Code Online (Sandbox Code Playgroud)
使用C ++ 14,现在可以实现:
auto F(int count)
{
return [](int m) { return 0; };
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10614 次 |
| 最近记录: |