Arduino C++: как определить параметр лямбда-функции?C++

Программы на C++. Форум разработчиков
Anonymous
Arduino C++: как определить параметр лямбда-функции?

Сообщение Anonymous »

У меня есть определение функции, которая принимает указатель на функцию в качестве аргумента:

Код: Выделить всё

void ReadLogFile(void (*msgHandler)(String msg) = NULL)
{
...
if (msgHandler) msgHandler(msg);
...
}
Я пытаюсь назвать это передачей лямбды:

Код: Выделить всё

logger.ReadLogFile([](String s)
{
MQTT_SendLogEntry(telemetry_topic, s, s);
});
Оказывается, это не работает, поскольку telemetry_topic является внешним по отношению к лямбде и не имеет доступа к внешней переменной. Поэтому я меняю лямбду, чтобы захватить все внешние переменные:

Код: Выделить всё

logger.ReadLogFile([&](String s)
{
MQTT_SendLogEntry(telemetry_topic, s);
});
На этот раз я получаю ошибку компиляции:

нет подходящей функции преобразования из "lambda [](String s) ->void» на «void (*)(String msg)» существует

Я не могу понять, как изменить объявление logger.ReadLogFile (), чтобы принять такую ​​лямбда-функцию, а затем вызвать ее оттуда.

Подробнее здесь: https://stackoverflow.com/questions/791 ... -parameter

Вернуться в «C++»