清风竹林

ぷ雪飘绛梅映残红
   ぷ花舞霜飞映苍松
     ----- Do more,suffer less

enum与对象状态检查

  对class成员函数而言,特别是public成员函数,在函数的入口处往往会有一大段if()语句进行参数有效性检查,(对应该的,对private成员函数,我更喜欢用assert)。除此之外,class对象也经常会拥有一定的状态,并某几个状态之间进行不断的切换,而class的成员函数也往往只会在对象牌某种状态下调用才是有效的,因此对这样的类函数,除参数检查外,状态检查也是必要的。
  比如对录音机Recorder这样一个类而言,至少会有几个状态:数据加载Loading,数据保存Saving,数据加载完毕Loaded,数据录制Recording,数据播放Playing等等,这些状态往往是互斥的(但并不总是这样),对Play()函数,必须Loaded=true,对Save函数,必须Recording=false
  状态检测的必要性在于:代码的扩大(复杂化),新人参与的维护及状态的更迭随时有可能在出人意料的情况下调用到某些函数,这些函数可能在大多数情况下在这里调用是有意义的,但在某些极端的情况下却可能造成数据破坏,因此在各函数入口处执行完善的状态检测是很有意义的。
  针对各种状态可以维护一个对应的bool值,但写一个enum附带一个status数组可能更容易维护:
    enum
    {
        stLoaded,                  
//数据加载完毕
        stRecording,                //数据录制中
        stReplaying,                //数据回放中
        stSize                       //状态数组的大小
    };
    
bool                        m_aStatus[stSize];
   OK,这时可以在构造函数中执行std::fill(m_aStatus, m_aStatus+stSize, false);对所有的状态进行初始化,特别是:你随后可以任意地增减这个enum中状态变量的数目或改动其名称,同时均不需要担心状态变量初始化问题

posted on 2008-09-27 11:44 李现民 阅读(353) 评论(0)  编辑 收藏 引用 所属分类: 语法试炼


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理