Sí, se puede:
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;
}
Sin embargo, usted tiene que tomar una decisión acerca de cómo manejar "desbordamiento" de su enumeración. Si my_month es igual a diciembre y ejecuta la instrucción ++my_month
, my_month pasará a ser numéricamente equivalente a diciembre + 1 y no tendrá el valor nominal correspondiente en la enumeración. Si eliges permitir esto, debes asumir que las instancias de la enumeración podrían estar fuera de límites. Si elige verificar orig == December
antes de incrementarlo, puede ajustar el valor a enero y eliminar esta preocupación. Luego, sin embargo, ha perdido la información que ha transferido a un nuevo año.
La implementación (o la falta de ella) de la sección TODO dependerá en gran medida de su caso de uso individual.
Mes y operador ++ (Month & en) { es = static_cast (static_cast (en) + 1); return en; } –
Stephen
Gracias, Stephen, por el código. Uno solo tiene que pensar en lo que debería hacer la función, si el mes ya es diciembre. Modulo alguien? – sellibitze
@Stephen: no necesita el molde para int, enums convierte a int (o más grande, si es necesario) implícitamente para operaciones aritméticas. –