type para libreria example enum c++ enums operators

para - enum type c++ example



Operadores sobrecargados por enums (2)

Sí lo es. La sobrecarga del operador se puede hacer para todos los tipos definidos por el usuario. Eso incluye enumeraciones.

¿Es posible definir operadores para enumeraciones? Por ejemplo, tengo Enum Month en mi clase y me gustaría poder escribir ++ my_month.
Gracias
PD
Para evitar el desbordamiento, hice algo como esto:

void Date::add_month() { switch(my_month_) { case Dec: my_month_ = Jan; add_year(); break; default: ++my_month_; break; } }


Sí tu puedes:

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, debe tomar una decisión sobre cómo manejar el "desbordamiento" de su enumeración. Si my_month es igual a diciembre y ejecuta la sentencia ++my_month , my_month seguirá siendo 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.