No seguinte trecho de código, a Color
enumeração é declarada na Car
classe para limitar o escopo da enumeração e tentar não "poluir" o espaço para nome 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) Essa é uma boa maneira de limitar o escopo da Color
enumeração? Ou devo declará-lo fora da Car
classe, mas possivelmente dentro de seu próprio espaço para nome ou estrutura? Acabei de encontrar este artigo hoje, que defende o último e discute alguns pontos interessantes sobre enumerações: http://gamesfromwithin.com/stupid-c-tricks-2-better-enums .
(2) Neste exemplo, ao trabalhar na classe, é melhor codificar a enumeração como Car::Color
, ou seria Color
suficiente? (Presumo que o primeiro seja melhor, apenas no caso de outro Color
enum declarado no espaço de nomes global. Dessa forma, pelo menos, somos explícitos sobre o enum a que estamos nos referindo.)
Car::Color getColor()
masvoid Car::setColor(Color c)
porquesetColor
já temos o especificador.