Déclaration d'un enum au sein d'une classe

Dans l'extrait de code suivant, le Color enum est déclaré dans la Car classe afin de limiter le champ d'application de l'enum et d'essayer de ne pas "polluer" l'espace de noms 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) Est-ce un bon moyen de limiter le champ d'application de la Color enum? Ou, dois-je le déclarer à l'extérieur de la Car classe, mais peut-être à l'intérieur de son propre espace de noms ou structure? Je viens de tomber sur cet article d'aujourd'hui, qui prône le dernier et discute certains points de nice sur les énumérations: http://gamesfromwithin.com/stupid-c-tricks-2-better-enums.

(2) Dans cet exemple, lorsque vous travaillez dans la classe, est-il préférable de code de l'énumération que Car::Color, ou serait tout simplement Color suffit-il? (Je suppose que le premier est mieux, juste au cas où il y a un autre Color enum déclarés dans l'espace de noms global. De cette façon, au moins, nous sommes explicite au sujet de l'énumération, nous nous référons.)

InformationsquelleAutor bporter | 2010-03-23