问题描述
我正在开发一个智能园艺应用程序,它将在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。