En el siguiente fragmento de código, la Colorenumeración se declara dentro de la Carclase 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 Colorenumeración? ¿O debería declararlo fuera de la Carclase, 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 Colorsuficiente? (Supongo que lo primero es mejor, en caso de que haya otra Colorenumeració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)porquesetColorya tenemos el especificador.