Nel seguente frammento di codice, l'enum Color
viene dichiarato all'interno della classe Car
al fine di limitare l'ambito dell'enumerazione e di non "inquinare" lo spazio dei nomi globale.Dichiarazione di enum all'interno di una classe
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) È questo un buon modo per limitare la portata del Color
enum? O dovrei dichiararlo al di fuori della classe Car
, ma possibilmente all'interno del proprio spazio dei nomi o della sua struct? Mi sono imbattuto in questo articolo oggi, che sostiene quest'ultimo e discute alcuni punti interessanti sulle enumerazioni: http://gamesfromwithin.com/stupid-c-tricks-2-better-enums.
(2) In questo esempio, quando si lavora all'interno classe, è migliore per codificare l'enumerazione come Car::Color
, o sarebbe solo Color
sufficiente? (Suppongo che il primo sia migliore, nel caso esista un altro enumerazione Color
dichiarato nel namespace globale. In questo modo, almeno, siamo espliciti sull'enumerazione a cui ci stiamo riferendo)
2. Sì e no. 'Car :: Color getColor()' ma 'void Car :: setColor (Color c)' perché in 'setColor' abbiamo già lo specificatore. –