C++ 将枚举取出到配置文件
为了提供正确的绘图顺序,我使用简单枚举器:C++ 将枚举取出到配置文件,c++,enums,C++,Enums,为了提供正确的绘图顺序,我使用简单枚举器: enum class DisplayLayer { background, // Below a lot of different layers dedicated to particular item types itemTypeA, itemTypeB, //.. itemTypeZ, effects } 每个绘图对象都知道自己的DisplayLayer(有时不止一个),在绘图之前,所有对象
enum class DisplayLayer
{
background,
// Below a lot of different layers dedicated to particular item types
itemTypeA,
itemTypeB,
//..
itemTypeZ,
effects
}
每个绘图对象都知道自己的DisplayLayer
(有时不止一个),在绘图之前,所有对象都收集在std::vector
中,并按照DisplayLayer
和其他属性的顺序进行排序。
这个简单的机制工作正常,但很少需要一些更新:添加新级别、删除一些旧级别并重新排序。当图层数适中时,检查所有相关图纸很容易,但现在它包含50+个图层,每次更改后,应仔细检查图纸。如果QA遗漏了一些案例,则会导致图纸问题。没有办法用补丁修复它,只能重建可执行文件
现在我想把DisplayLayer
enum取出到配置文件中,比如.xml
或.json
。它将允许在不重建二进制文件的情况下制作补丁,并且在调试时间上具有额外的灵活性。
配置可能只包含键值对
问题是我应该使用哪些数据结构来获得更好的解决方案和性能。
例如,将层ID保留为字符串常量集是否是一个好主意,如下所示:
const std::string DISP_LAYER_BACKGROUND = "background";
const std::string DISP_LAYER_ITEM_TYPE_A = "itemTypeA";
const std::string DISP_LAYER_ITEM_TYPE_B = "itemTypeB";
...
在配置解析器中,一致地使用它们从配置文件中提取排序值并填充std::map
,其中键是LayerId
,值是对应于排序层的值。
在这种情况下,每个绘图对象将由std::string
数据字段组成,而不是DisplayLayer
,但在绘图之前,它将需要我们的地图将layerName
转换为图层排序顺序
提前感谢您提出如何将枚举器从代码中取出到配置文件并解决我的特定问题。您是否尝试过
std::unordered\u map
?不,我还没有尝试过任何方法。但从概念上讲,使用std::map似乎有O(1)复杂性。是的,当std::map(红黑树)有O(logn)
复杂性时。