c++ - 使用枚举范围进行简单的状态跟踪
问题描述
我正在使用一系列用于嵌入式系统状态管理的枚举。
我现在正在实现的是一个系统,以一种简单的方式向用户显示特定模块的状态。所以我想将这些不同的状态转换为 3 个超级状态,在这种情况下,红色/黄色/绿色表示错误/配置/运行。
到目前为止,我实现它的简单方法如下。
enum State
{
StateAA = 0,
StateAB,
StateAC,
StateBA = 100,
StateBB,
StateBC,
StateCA = 200,
StateCB
};
void DisplayState(State st)
{
if(st < 100)
displayColor = red;
else if(st < 200)
displayColor = yellow;
else
displayColor = green;
}
这允许在不调整显示功能的情况下管理对枚举的更改,只要范围没有更改。
然而,这感觉有点 hacky,为了找到更好的答案,我很难措辞这个问题。任何建议,将不胜感激。
解决方案
这看起来确实“hacky”。而是考虑使用状态机,其中每个状态依次使用自己的内部状态机。这个内部状态应该与程序的其余部分无关,而是私有封装。
还要避免手动为枚举分配值,如果不这样做,则可以将枚举类型用作数组索引,这很方便。如果你不这样做,你也可以State_n
在最后使用成员的老派技巧,然后对应于使用的状态数。(这反过来可以static_assert
针对数组等以确保程序完整性。)
推荐阅读
- java - Recyclerview 重复数据滚动
- android - 如何加快Sqlite中大量数据的插入
- cordova - 在构建管道上找不到模块 cordova-common
- mysql - 如何解决错误 - #1022 - 无法写入;表“Lives_in”中的重复键
- mdx - 根据 MDX 中的日期字段获取最近 n 年的数据
- karate - 如果我在同一功能文件和不同场景中多次使用此功能,callonce 功能是否会再次执行该功能
- javascript - 如何自定义Chrome、Firefox等网站正在播放媒体的通知
- lua - 如何让我的 Roblox 可点击块停止移动
- javascript - 现有数组中的 FaunaDB 更新(追加、删除)
- javascript - 查找 Tabulator 表的行数