有函数返回lambda表达式吗?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (23)

我想知道是否可以编写一个函数,在C++11中返回lambda函数。当然,一个问题是如何声明这样的函数。每个lambda都有一个类型,但该类型在C++中是不可表达的。我不认为这会奏效:

auto retFun() -> decltype ([](int x) -> int)
{
    return [](int x) { return x; }
}

也不是这样:

int(int) retFun();

我不知道从lambdas到指针之类的自动转换。唯一的解决方案是手工制作函数对象并返回它吗?

提问于
用户回答回答于

你不需要手工创建函数对象,只需使用std::function,而lambda函数可转换为:

std::function<int (int)> retFun() {
    return [](int x) { return x; };
}
用户回答回答于

对于这个简单的例子,你不需要std::function

第5.1.2/6号标准:

类的闭包类型。Lambda表达没有兰达-俘获具有与闭包类型的函数调用操作符相同的参数和返回类型的公共的、非虚的、非显式的Const转换函数到指针到函数的函数。此转换函数返回的值应该是一个函数的地址,该函数在调用时具有与调用闭包类型的函数调用操作符相同的效果。

因为你的函数没有捕获,这意味着可以将lambda转换为指向类型函数的指针。int (*)(int):

typedef int (*identity_t)(int); // works with gcc
identity_t retFun() { 
  return [](int x) { return x; };
}

这是我的理解

扫码关注云+社区

领取腾讯云代金券