Nel seguente frammento di codice, l' Color
enum viene dichiarato all'interno della Car
classe al fine di limitare l'ambito dell'enum e cercare di non "inquinare" lo spazio dei nomi globale.
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) È un buon modo per limitare la portata Color
dell'enum? O dovrei dichiararlo al di fuori della Car
classe, ma possibilmente all'interno del suo spazio dei nomi o struttura? Ho appena trovato questo articolo oggi, che sostiene quest'ultimo e discute alcuni bei punti sugli enum: http://gamesfromwithin.com/stupid-c-tricks-2-better-enums .
(2) In questo esempio, quando si lavora all'interno della classe, è meglio codificare l'enum come Car::Color
o sarebbe Color
sufficiente? (Suppongo che il primo sia migliore, nel caso in cui ci sia un altro Color
enum dichiarato nello spazio dei nomi globale. In questo modo, almeno, siamo espliciti sull'enum a cui ci stiamo riferendo.)
Car::Color getColor()
mavoid Car::setColor(Color c)
perché insetColor
abbiamo già l'identificatore.