问题描述
-
如果
Color
是特定于Car
s 的东西,那么这就是您限制其范围的方式。如果您要拥有Color
其他类使用的另一个枚举,那么您不妨将其设为全局(或至少在外部Car
)。 -
没什么区别。如果有一个全局的,那么无论如何仍然使用本地的,因为它更接近当前范围。请注意,如果您在类定义之外定义这些函数,那么您需要
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-tricks-2-better-enums 。
(2) 在这个例子中,当 在
类中工作时,最好将枚举编码为Car::Color
,还是就Color
足够了?(我认为前者更好,以防万一Color
在全局命名空间中声明了另一个枚举。这样,至少,我们明确了我们所指的枚举。)