该程序从外部设备的闪存中读取一个数字(整数,1 字节,无符号)。对于其编程解释,使用枚举:
enum BoardType {
Classic = 0,
Static = 1,
Smart = 2
}
BoardType t = (BoardType)getBoardType();
问题是肉眼可见的:内存中包含的数字不一定包含在枚举中。而且我认为在运行时没有办法检查返回的数字是否正确,但这将是强制性的,因为闪存在擦除状态下存储值 0xFF,而其他数字最终在那里因为我的歪手也可以到达那里。那么,有没有办法检查返回的数字是否包含在枚举中,如果没有,以编程方式解释这个数字的正确方法是什么?
总的来说,没办法。因为它们只是整数值的约定。
因此,如果您真的需要,那么要么检查范围(如果枚举没有“间隙”,要么有一组单独的值 并检查其中是否存在。
我想是的。(c) 绒毛
专门针对您的示例,您可以这样做:
或者像这样:
UPD:对于有“漏洞”的情况,
enum
你可以这样做:我建议,如果我们在谈论速度和少量命令,只需使用表转换。而且桌子不会太大。
代码示例(链接到 ideone):
结论:
首先,您可以使用该函数
ToEnum()
在异常处理块中捕获“不正确”的值。其次,使用表
Cast
很容易与BoardType::Bad
异常处理比较“烦人”。第三,如果有几十个“命令”,它
switch
的可读性会更差,并且处理速度可能会更慢。