W poniższym fragmencie kodu Colorwyliczenie jest zadeklarowane w Carklasie, 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 Colorwyliczenia? A może powinienem zadeklarować go poza Carklasą, 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 Colorwystarczy? (Zakładam, że to pierwsze jest lepsze, na wypadek gdyby Colorw 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żsetColormamy już specyfikator.