Arduino C++:如何定义 lambda 函数参数

问题描述 投票:0回答:1

我有一个带有函数参数的函数定义:

void ReadLogFile(void (*msgHandler)(String msg) = NULL)
{
  ...
  if (msgHandler) msgHandler(msg);
  ...
}

我尝试将此称为传递 lambda:

logger.ReadLogFile([](String s) 
  {
    MQTT_SendLogEntry(telemetry_topic, s, s);
  });

事实证明这不起作用,因为 telemetry_topic 位于 lambda 外部,并且无法访问外部变量。因此,我更改lambda来捕获所有外部变量:

logger.ReadLogFile([&](String s) 
  {
    MQTT_SendLogEntry(telemetry_topic, s);
  });

这次出现编译错误:没有合适的从“lambda [](String s)->void”到“void (*)(String msg)”的转换函数存在

我不知道如何更改 logger.ReadLogFile() 的声明以接受这样的 lambda 函数,然后如何从那里调用它?

谢谢你。

尝试调用 lambda 函数。

c++ lambda arduino function-pointers
1个回答
0
投票

不幸的是,如果 lambda 没有捕获,则只能将其转换为函数指针(有关更多信息,请参阅此处

您可以将参数设置为 std::function 。

© www.soinside.com 2019 - 2024. All rights reserved.