Я делаю простое домашнее решение IoT с использованием esp8266, используя сборку библиотек для маршрутов веб-сервера. Эти функции lib не любят использовать функции с аргументами, поэтому мое решение заключалось в использовании lambdas и захвате переменных, которые мне нужны. Проблема в том, что при попытке работать с одним экземпляром объекта из двух разных lambdas при использовании методов set pinPower, которые обновляют int, сохраняя мощность вывода (1 или 0, да, я знаю, что bool будет лучше), изменение в одна лямбда не появляется в другой.Работа с объектами, захваченными в нескольких lambdas
Я думаю, что это связано с тем, что lambdas захватывает переменные по значению и создает новый экземпляр моего класса; Я попытался захватить outputPinArray [i] в качестве ссылки, но это просто означало, что функция getter не получила правильное значение и поэтому не смогла сделать так много, как переключить значение (класс использует getter внутри). Использование статической переменной и функции getter, но я хочу, чтобы иметь возможность использовать несколько экземпляров класса, и поэтому не нужно использовать общую переменную. Я видел различные сообщения вокруг, которые, похоже, указывают на захват с использованием ключевого слова extern, но я не нашел много документации для использования этого в lambdas и не смог понять, как правильно его использовать.
Это код, я работаю с:
for(int i = 0; i < 1; i++) {
server.on(path, HTTP_POST, [outputPinArray , argToCheck, i]() mutable {
// Sets pinNumber variable and turns on or off the arduino pin using outputPinArray[i].setPinPower or .togglePinPower
});
server.on(path, HTTP_GET, [outputPinArray,i](){
// Send integer value using outputPinArray[i].getPinPower()
});
}
outputPin код класса:
int OutputPin::getPinPower(){
return pinPower;
}
void OutputPin::setPinPower(int value){
if(value == HIGH || value == LOW){
pinPower = value;
digitalWrite(getPinNum(), pinPower);
}
Любая помощь приветствуется, спасибо!
Вам следует попытаться опубликовать наименьшее количество кода, необходимого для демонстрации вашего вопроса. [mcve] Когда вы публикуете стену с текстом и стенкой кода, вы ограничиваете число желающих попробовать и помогать. – xaxxon