Да, вы можете:
enum Month
{
January,
February,
// ... snip ...
December
};
// prefix (++my_month)
Month& operator++(Month& orig)
{
orig = static_cast<Month>(orig + 1); // static_cast required because enum + int -> int
//!!!!!!!!!!!
// TODO : See rest of answer below
//!!!!!!!!!!!
return orig;
}
// postfix (my_month++)
Month operator++(Month& orig, int)
{
Month rVal = orig;
++orig;
return rVal;
}
Однако вы должны принять решение о том, как справиться с «переполнением» вашего перечисления. Если my_month равен декабрю, и вы выполняете оператор ++my_month
, my_month все равно станет численно эквивалентным декабрь + 1 и не будет иметь соответствующего именованного значения в перечислении. Если вы решите разрешить это, вы должны предположить, что экземпляры перечисления могут выходить за пределы. Если вы решите проверить orig == December
, прежде чем увеличивать его, вы можете перенести значение обратно в январь и устранить эту проблему. Однако затем вы потеряли информацию, которую перенесли в новый год.
Реализация (или ее отсутствие) раздела TODO будет сильно зависеть от вашего индивидуального варианта использования.