[英]How do I increment an enum in VS C++ 6.0?
我復制並粘貼了一些增加枚舉的代碼:
myenum++;
這段代碼在VS.NET C ++ 2003中編譯時效果很好
我現在正在VS 6.0中開發並得到錯誤:
錯誤C2676:二進制'++':'枚舉ID'未定義此運算符或轉換為預定義運算符可接受的類型
我怎樣才能讓它在6.0中表現相同?
我認為在一個易於理解的枚舉上定義operator ++沒有錯。 這不是運算符重載的目的嗎? 如果上下文沒有意義(例如,帶有洞的枚舉),那么當然它沒有意義。 為實現復數的復雜類定義operator *不僅有效,而且是C ++中數學運算符重載的一個很好的應用!
如果開發人員定義了一個枚舉,其中operator ++對該枚舉的客戶端有明顯的直觀意義,那么這就是該運算符重載的一個很好的應用。
enum DayOfWeek {Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday};
inline DayOfWeek operator++(DayOfWeek &eDOW, int)
{
const DayOfWeek ePrev = eDOW;
const int i = static_cast<int>(eDOW);
eDOW = static_cast<DayOfWeek>((i + 1) % 7);
return ePrev;
}
枚舉可能是整體的,但並不意味着它涵蓋了連續的范圍。
這個
enum {
A,
B,
C,
}
可能
默認為
enum {
A = 0,
B = A + 1,
C = B + 1,
}
所以你可以逃脫
int a = A;
a++;
但是,如果你有
enum {
A = 2,
B = 4,
C = 8,
}
現在+1不會起作用。
現在,如果你也有類似的東西
enum {
FIRST,
A = FIRST,
B,
C,
LAST = C
}
然后在迭代枚舉時你會做A和C兩次嗎?
迭代枚舉的目的是什么? 你想做'為所有'或某些子集,是否實際上有枚舉的命令?
我將它們全部放在容器中並反復進行迭代
請嘗試轉換為int,添加一個(+1)並轉換回枚舉。
myenum=(myenum_type)((int)myenum+1);
這很難看,但它確實有效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.