Dalam cuplikan kode berikut, Colorenum dideklarasikan di dalam Carkelas untuk membatasi ruang lingkup enum dan berusaha untuk tidak "mencemari" namespace global.
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) Apakah ini cara yang baik untuk membatasi ruang lingkup Colorenum? Atau, haruskah saya mendeklarasikannya di luar Carkelas, tetapi mungkin di dalam namespace atau struct sendiri? Saya baru saja menemukan artikel ini hari ini, yang mendukung yang terakhir dan membahas beberapa poin bagus tentang enum: http://gamesfromwithin.com/stupid-c-tricks-2-better-enums .
(2) Dalam contoh ini, ketika bekerja di dalam kelas, apakah yang terbaik untuk kode enum sebagai Car::Color, atau hanya Colorcukup? (Saya menganggap yang pertama lebih baik, kalau-kalau ada Colorenum lain yang dideklarasikan di namespace global. Dengan begitu, setidaknya, kami secara eksplisit tentang enum yang kami rujuk.)
Car::Color getColor()tetapivoid Car::setColor(Color c)karena disetColorkita sudah memiliki specifier.