zoukankan      html  css  js  c++  java
  • 利用枚举,简化多个标志位统计

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

    首先我是一个菜鸟,写出的代码简单粗暴,也算是解决了产品的需求。然后代码提交到部门老大那,被痛批一顿,驳回了。老大人不错,也给出自己的解决办法,这个方法确实好。就是利用枚举和一个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;
    }
  • 相关阅读:
    关于直播的技术整理2
    关于直播的技术整理
    android drawable size
    Could not find gradle wrapper within android sdk
    基于开源Red5搭建的视频直播平台
    Cannot find module 'rxjs/operators/share'
    Cannot find type definition file for '.svn'
    Ionic国际化解决方案
    本博客停止更新改用wordperss
    Powershell批量安装SNMP服务
  • 原文地址:https://www.cnblogs.com/zhugaopeng/p/8903515.html
Copyright © 2011-2022 走看看