利用枚举,简化多个标志位统计

最近项目中产品提出一个需求:页面中增加一个选择框,有六个复选框供用户去选择。选择完,点确定,记录这六个标志的状态并对用户的选择添加日志。

首先我是一个菜鸟,写出的代码简单粗暴,也算是解决了产品的需求。然后代码提交到部门老大那,被痛批一顿,驳回了。老大人不错,也给出自己的解决办法,这个方法确实好。就是利用枚举和一个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;
}

 

posted @ 2018-04-21 20:12  随性者也  阅读(328)  评论(0)    收藏  举报