我有几个用作类型常量的枚举。例如:
enum item_type {
street,
town,
lake,
border,
...
}
枚举值在代码中用于指定对象类型,并作为数据文件的一部分写入磁盘。这在大多数情况下都很好用,但有一个缺点:
在不更改所有后续成员的整数值的情况下,无法删除枚举成员(因为它不再被使用)。因此,任何此类更改都会使代码与现有数据文件不兼容。
有什么好的技术可以避免这个问题吗?也许一些预处理器技巧?
我能想到的唯一解决方案是显式设置所有整数值。虽然这可行,但难以阅读和管理大型枚举。
注:本题来自Navit的源码,它使用了几个这样的“类型枚举”(尽管它们实际上隐藏在一些宏后面)。
最佳答案
如果你很少想删除项目,你可以做类似的事情
enum item_type {
street,
town,
//lake,
border = town+2,
...
}
即仅明确地为紧跟在您删除的项目之后的项目分配一个值。
既然兼容性对你来说很重要,那么硬着头皮给所有项目明确编号会更可靠
enum item_type {
street = 0,
town = 1,
//lake = 2,
border = 3,
...
}
关于c - 从枚举中删除一个值而不更改其他值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24046840/