通常在其他语言中,例如VB,JAVA等,都可以直接对枚举类型进行遍历,但是要在c/c++中直接遍历,就遇到问题了。那是不是C/C++中用不着遍历枚举类型呢?我个人觉得不是,因为既然其他语言中有遍历的方法,那肯定就有存在的理由,例如VB中可以使用一个函数轻轻松松拆分一个字符串,C/C++就不行,还得自己写,那好吧,那我们就自己写遍历枚举类型的方法。
以上是枚举申明,以下是遍历代码:
但是直接这样是有问题的,因为枚举类型没有操作符++的实现方法,我们要自己写一个:
这样,我们就可以对枚举类型进行遍历了。
我选取CDialogEx里的一个枚举变量来做例子:
enum BackgroundLocation
{
BACKGR_TILE,
BACKGR_TOPLEFT,
BACKGR_TOPRIGHT,
BACKGR_BOTTOMLEFT,
BACKGR_BOTTOMRIGHT,
};
以上是枚举申明,以下是遍历代码:
for( CDialogEx::BackgroundLocation myEnum = CDialogEx::BACKGR_TILE ;
myEnum <= CDialogEx::BACKGR_BOTTOMRIGHT ; (CDialogEx::BackgroundLocation)myEnum++ )
{
SetBackgroundImage(IDB_BITMAP_BK, myEnum);
AfxMessageBox(_T("停一下"));
}
但是直接这样是有问题的,因为枚举类型没有操作符++的实现方法,我们要自己写一个:
inline CDialogEx::BackgroundLocation operator++( CDialogEx::BackgroundLocation &rs, int )
{
CDialogEx::BackgroundLocation oldEnum = rs;
rs = (CDialogEx::BackgroundLocation)(rs + 1);
return oldEnum;
}
这样,我们就可以对枚举类型进行遍历了。