最近项目中产品提出一个需求:页面中增加一个选择框,有六个复选框供用户去选择。选择完,点确定,记录这六个标志的状态并对用户的选择添加日志。
首先我是一个菜鸟,写出的代码简单粗暴,也算是解决了产品的需求。然后代码提交到部门老大那,被痛批一顿,驳回了。老大人不错,也给出自己的解决办法,这个方法确实好。就是利用枚举和一个switch-case函数完美解决问题。
枚举这样定义:
enum EWarnType { EWT_One = 0x00000001, EWT_Two = 0x00000002, EWT_Three = 0x00000004, EWT_Four = 0x00000008, EWT_Five = 0x00000010, EWT_Six = 0x00000020,
_C_MAX_NUM, }
switch-case函数定义如下:
std::string getString(int value) { switch(value) { case EWT_One: return "one"; case EWT_Two: return "two"; case EWT_Three: return "three"; case EWT_Four: return "four"; case EWT_Five: return "five"; case EWT_Six: return "six"; default: return "one"; } }
这样做的好处是可以做到代码不会出现重复,便于后期添加新功能和维护。
1. 在页面添加这些标记你可以这样做:
int nFlag = EWT_One; int i = 0; while (nFlag < _C_MAX_NUM) { //...do something ++i; nFlag = EWT_One << i; }
通过一个循环搞定。后期的增加新选择和维护,只需要添加枚举值和修改switch-case函数即可。
2. 记录用户的选择,用一个int类型搞定
int nValue = 0; //记录用户当前选择的状态 int nFlag = EWT_One; int i = 0; while(nFlag < _C_MAX_NUM) { if(...) //如果用户选择这个状态 nValue |= nFlag; ++i; nFlag = EWT_One << i; }