В следующем фрагменте кода 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
в глобальном пространстве имен объявлен другой enum. Таким образом, по крайней мере, мы явно говорим о перечислении, на которое мы ссылаемся.)
Car::Color getColor()
аvoid Car::setColor(Color c)
потому что уsetColor
нас уже есть спецификатор.