type para libreria example enum c++ c++11 enums

para - enum type c++ example



Incremento y decremento de la "clase de enumeraciĆ³n" (1)

Como sabemos, el incremento y la disminución de la enum en C ++ 03 es ilegal, ya que la enum C ++ 03 puede no ser continua. Pero el estándar C ++ 11 introdujo la nueva construcción de enum class , que, según Wikipedia, es más segura para los tipos porque no está basada en ningún tipo contable simple. Entonces, si tenemos una lista limitada de valores de una enumeración, ¿podemos escribir algo como

enum class Colors { Black, Blue, White }; // ... Colors color = Colors::White; color++;

y ¿funcionará correctamente (por ejemplo, el incremento de White devolverá Black y la disminución de Black devolverá White )?

Si no podemos escribir dicho código, ¿conoce alguna clase de comportamiento, ya sea de boost o de Qt que nos proporcione esta característica (correcto en y decremento)?


funcionará correctamente

No. Las enum no están diseñadas para "ajustarse" de la manera que describe de forma predeterminada.

Y la enum class C ++ 11 no garantiza valores contiguos, como se describe en la enum C ++ 03.

Sin embargo, puede definir el comportamiento de ajuste para su enumeración particular. Esta solución supone que los valores son contiguos , como la enumeración que describió.

enum class Colors { Black, Blue, White, END_OF_LIST }; // Special behavior for ++Colors Colors& operator++( Colors &c ) { using IntType = typename std::underlying_type<Colors>::type c = static_cast<Colors>( static_cast<IntType>(c) + 1 ); if ( c == Colors::END_OF_LIST ) c = static_cast<Colors>(0); return c; } // Special behavior for Colors++ Colors operator++( Colors &c, int ) { Colors result = c; ++c; return result; }