В следующем фрагменте кода перечисление 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
. Таким образом, по крайней мере, мы явно указываем на перечисление, на которое мы ссылаемся.)