decltype中的C ++ 11 lambda

时间:2011-01-31 00:15:04

标签: c++ lambda c++11 decltype

以下代码:

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的正确方法是什么?

3 个答案:

答案 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; };
}