В следующем фрагменте кода 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нас уже есть спецификатор.