我有枚举
enum ProgramID
{
A = 0,
B = 1,
C = 2,
MIN_PROGRAM_ID = A,
MAX_PROGRAM_ID = C,
} CurrentProgram;
现在,我试图像这样增加CurrentProgram
:CurrentProgram++
,但编译器抱怨:no 'operator++(int)' declared for postfix '++' [-fpermissive]
。我认为有这样一个运算符会增加"枚举",但如果没有,我如何获得其中一个值的后继者?
答案 0 :(得分:5)
没有这样的运算符用于枚举。但是你可以自己编写那个操作符。例如
ProgramID operator ++( ProgramID &id, int )
{
ProgramID currentID = id;
if ( MAX_PROGRAM_ID < id + 1 ) id = MIN_PROGRAM_ID;
else id = static_cast<ProgramID>( id + 1 );
return ( currentID );
}
答案 1 :(得分:2)
不,你错了,没有这样的操作员。
要获取下一个,请将您的值转换为int
,将其递增,然后reinterpret_cast
将其转换回enum
。请注意,超出范围最终会导致未定义的行为,因此检查是个好主意。