【问题标题】:What is the type of a "variable" containing a lambda function that captures by reference? [duplicate]包含通过引用捕获的 lambda 函数的“变量”的类型是什么? [复制]
【发布时间】:2018-06-19 00:22:30
【问题描述】:

我正在对 lambda 函数进行快速实验,但无法弄清楚如何在下面声明 testFunc 变量。

一般来说,函数指针可以定义如下:

int (*someFunc)(int, int) = otherFunction;

当对没有任何闭包的 lambda 函数执行此操作时,它可以正常工作:

int (*someFunc)(int) = [](int a) -> int { return 0; };

但是,在尝试通过引用捕获时出现编译器错误:

void (*testFunc)() = [&]() -> void { /* code here */ };

如果我将testfunc 声明为auto,它会起作用,但我很好奇上面的代码有什么问题?

【问题讨论】:

  • 你可以使用std::function<void()>,但要注意开销,它很小但存在。

标签: c++ lambda function-pointers


【解决方案1】:

很简单:

所有 lambda 都有唯一的匿名类型。 (这就是 auto 起作用的原因)

没有捕获的 Lambda 可以转换为函数指针,但捕获的 lambda 不能。

【讨论】:

  • 优秀的答案!您能否给出一个包含带有捕获闭包的 lambda 的变量的示例定义?我猜它需要一个模板类?
  • @Gogeta70 我不确定你所说的“捕获关闭”是什么意思。
  • 我的意思是如何在我的问题中定义testFunc
  • @Gogeta70 没有auto 是不可能的。无法将捕获状态的 Lambda 转换为常规函数指针。
  • Lambda 类型被称为匿名是有原因的。 :)
猜你喜欢
  • 2015-04-14
  • 1970-01-01
  • 1970-01-01
  • 2011-09-25
  • 1970-01-01
  • 1970-01-01
  • 2018-10-17
  • 1970-01-01
  • 2017-10-20
相关资源
最近更新 更多