我有一个函数定义,它以函数指针作为参数:
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 函数,然后如何从那里调用它。