在类中声明一个枚举

问题描述

  1. 如果Color是特定于Cars 的东西,那么这就是您限制其范围的方式。如果您要拥有Color其他类使用的另一个枚举,那么您不妨将其设为全局(或至少在外部Car)。

  2. 没什么区别。如果有一个全局的,那么无论如何仍然使用本地的,因为它更接近当前范围。请注意,如果您在类定义之外定义这些函数,那么您需要Car::Color函数的接口中明确指定。

解决方法

在下面的代码片段中,Color枚举是在Car类中声明的,以限制枚举的范围并尽量不“污染”全局命名空间。

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)这是限制Color枚举范围的好方法吗?或者,我应该在Car类之外声明它,但可能在它自己的命名空间或结构中?我今天刚看到这篇文章,它提倡后者并讨论了一些关于枚举的好点:
http
://gamesfromwithin.com/stupid-c-tr​​icks-2-better-enums 。

(2) 在这个例子中,当
类中工作时,最好将枚举编码为Car::Color,还是就Color足够了?(我认为前者更好,以防万一Color在全局命名空间中声明了另一个枚举。这样,至少,我们明确了我们所指的枚举。)