对结构的所有对象执行条件语句,而不必编写每个对象?

问题描述

我正在开发一个智能园艺应用程序,它将在ESP32上运行,并且想知道如何在每个对象的特定变量上应用条件语句,而不专门引用每个对象。我制作了一个结构,定义了直接连接到ESP32的设备。这是一个小片段:

    struct device
    {
    public:
        int pin;
        bool pwrStatus = false;
        int hours;
        int minutes;
        int duration; 
        int iterations; 
     };

我的目标是将每个对象中以小时和分钟存储的变量与从NTP服务器检索的当前小时和分钟进行比较,无需编写每个设备的名称,例如:

    if((fan.hours==ntpHours) && (fan.minutes==ntpMinutes)){
        // *do something*
    }
    else if((ac.hours==ntpHours) && (ac.minutes==ntpMinutes)){
        // *do something*
    }

尽管我知道这是不可能的,但我想写些类似的东西:

    if((device.hours==ntpHours) && (device.minutes==ntpMinutes)){
        // *do something*
    }

解决方法

将指针放在矢量中的所有设备上,然后可以在它们上循环。

std::vector<device*> all_devices {&fan,&ac,...};
...

for (auto &dev : all_devices) {
    if (dev->hours == ntpHours && dev->minutes == ntpMinutes) {
        // do something
    }
}
,

最后,对于比较的特殊情况,C ++ 20给出了答案:

struct device{
    auto operator<=>( device const & ) const= default;//abracadabra
    ...
};

所有比较运算符或按字典顺序自动定义-前提是所有成员都存在对等运算符。 但是请确保针对C ++ 20进行编译。否则就没有运气。

欢呼声, FM。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...