tengo una clase en la que tengo una enumeración, que se define así:typedef'ing una enumeración no hace que los valores de enumeración visibles
class X
{
public:
enum Direction {DIR_LEFT, DIR_RIGHT};
};
Ahora quiero que esta enumeración sea reutilizado en otra clase, de esta manera:
class Y
{
public:
typedef X::Direction Direction;
};
como era de esperar, mediante Y :: Dirección funciona correctamente, por ejemplo:
void myFunction (Y::Direction dir)
{
}
Pero los valores dentro de la ENU meration no parece ser 'copiado' junto con typedef. Si escribo lo siguiente, tengo errores de compilación:
myFunction (Y::DIR_LEFT);
En cambio, tengo que referir al lugar original de la enumeración de nuevo, como esto:
myFunction (X::DIR_LEFT);
lo que contradice mi propósito de typdefing la enumeración.
La única solución que veo es sacar la enumeración de la clase X y ponerla en otra clase (por ejemplo, MyEnums), para que pueda ser reutilizada por X e Y (aunque todavía deben usar MyEnums :: DIR_LEFT y MyEnums :: DIR_RIGHT), pero al menos el código ya no depende de la clase X.
¿Por qué los valores de la enumeración en sí no están expuestos a través de typedef?
¿Hay algún otro patrón para administrar enumeraciones en diferentes clases?
Probablemente deberías eliminar el prefijo 'DIR_' porque era un" espacio de nombre de pobre "artificial:' struct Dirección {enum {LEFT, RIGHT};}; '- solo un poco más sucio que la sintaxis de C++ 0x' enum class Dirección {LEFT, RIGHT}; ' – anatolyg
@anatolyg De hecho, es una buena idea, hice ese cambio. –