在多个lambdas捕获的对象上操作
Operating on objects captured in multiple lambdas
我使用ESP8266制作了一个简单的自制物联网解决方案,并使用库中的Web服务器路由中的构建构建。这些LIB功能不喜欢与参数一起使用函数,因此我的解决方案是使用lambdas并捕获所需的变量。问题是,当尝试从两个不同lambdas的对象的同一实例操作时,使用PINPOPTOR SETETER方法来更新int存储PIN plate的int(1或0,是的,是的,我知道Bool会更好)一个lambda不会出现在另一个。
我认为这与lambdas按值捕获变量有关,并且创建了我的班级的新实例。我已经尝试捕获输出pinarray [i]作为参考,但这只是意味着getter函数无法获得正确的值,因此无法做到以切换该值的方式(内部使用Getter)。使用静态变量和GETTER函数可行,但我希望能够使用类的多个实例,因此不需要这样的共享变量。我已经看到周围的各种帖子似乎指向使用外部关键字捕获,但是我在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()
});
}
输出pin类代码:
int OutputPin::getPinPower(){
return pinPower;
}
void OutputPin::setPinPower(int value){
if(value == HIGH || value == LOW){
pinPower = value;
digitalWrite(getPinNum(), pinPower);
}
任何帮助将不胜感激,谢谢!
如果我正确理解您的问题,您需要做的就是
server.on(path, HTTP_POST, [&outputPinArray , argToCheck, i]() {
失败我的部分,在路线为ESP8266Weberver对象时,该数组脱离了范围。在@obamator
相关文章:
- 使用操作重载对象重新分配对象
- 如何在不复制的情况下操作 QByteArray 对象?
- 如果普通默认构造函数不执行任何操作,为什么我们不能使用 malloc 创建平凡可构造的对象?
- 如何在 c++ 中操作当前对象的地址?
- 操作后通过运算符分配对象
- 为什么互斥对象与原子操作不同,前者是操作系统级,后者是处理器级
- pybind 如何对 py::list 对象进行操作
- 在C++中,当表达式涉及对象时,将表达式赋值到对象中时,是否有定义的操作顺序?
- 设计模式中对象中的过程(方法和操作)的状态
- 具有已定义操作重载的 C++ 非类型化值对象/变量库
- 如何在多个函数中操作 ifstream 对象
- 如何通过 COM 互操作访问复杂对象的属性?
- 从对象成员函数内部删除操作的技术 /设计模式
- 如何使用多态性将相同的操作应用于具有相同基类的不同对象的unordered_sets
- 在提前操作过程中,对象会发生什么
- 命令模式:如何进行连续操作?(例如,移动对象)
- 在多个lambdas捕获的对象上操作
- 为什么在赋值操作完成后调用对象的析构函数
- 使用迭代器执行对象操作的函数
- 如何优化C 对象I/O操作的性能