W poniższym fragmencie kodu Color
wyliczenie jest zadeklarowane w Car
klasie, aby ograniczyć zakres wyliczenia i nie „zanieczyszczać” globalnej przestrzeni nazw.
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) Czy to dobry sposób na ograniczenie zakresu Color
wyliczenia? A może powinienem zadeklarować go poza Car
klasą, ale prawdopodobnie w jego własnej przestrzeni nazw lub strukturze? Właśnie dziś trafiłem na ten artykuł, który opowiada się za tym drugim i omawia kilka fajnych punktów na temat wyliczeń: http://gamesfromwithin.com/stupid-c-tricks-2-better-enums .
(2) W tym przykładzie, podczas pracy w klasie, czy najlepiej jest zakodować wyliczenie jako Car::Color
, czy po prostu Color
wystarczy? (Zakładam, że to pierwsze jest lepsze, na wypadek gdyby Color
w globalnej przestrzeni nazw zadeklarowano inne wyliczenie. W ten sposób przynajmniej jasno określamy wyliczenie, do którego się odnosimy).
Car::Color getColor()
alevoid Car::setColor(Color c)
ponieważsetColor
mamy już specyfikator.