我有一个带有函数参数的函数定义:
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 函数。
不幸的是,如果 lambda 没有捕获,则只能将其转换为函数指针(有关更多信息,请参阅此处。
您可以将参数设置为 std::function 。