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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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