En el siguiente fragmento de código, la Color
enumeración se declara dentro de la Car
clase para limitar el alcance de la enumeración y tratar de no "contaminar" el espacio de nombres global.
class Car
{
public:
enum Color
{
RED,
BLUE,
WHITE
};
void SetColor( Car::Color color )
{
_color = color;
}
Car::Color GetColor() const
{
return _color;
}
private:
Car::Color _color;
};
(1) ¿Es esta una buena forma de limitar el alcance de la Color
enumeración? ¿O debería declararlo fuera de la Car
clase, pero posiblemente dentro de su propio espacio de nombres o estructura? Acabo de encontrar este artículo hoy, que defiende este último y discute algunos puntos interesantes sobre las enumeraciones: http://gamesfromwithin.com/stupid-c-tricks-2-better-enums .
(2) En este ejemplo, cuando se trabaja dentro de la clase, ¿es mejor codificar la enumeración como Car::Color
, o sería Color
suficiente? (Supongo que lo primero es mejor, en caso de que haya otra Color
enumeración declarada en el espacio de nombres global. De esa manera, al menos, somos explícitos sobre la enumeración a la que nos referimos).
Car::Color getColor()
perovoid Car::setColor(Color c)
porquesetColor
ya tenemos el especificador.