ในโค้ดต่อไปนี้Color
enum จะถูกประกาศภายในCar
คลาสเพื่อ จำกัด ขอบเขตของ enum และพยายามที่จะไม่ "สร้างมลภาวะ" เนมสเปซส่วนกลาง
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
enum หรือไม่? หรือฉันควรประกาศมันนอกCar
ชั้นเรียน แต่อาจจะอยู่ในเนมสเปซหรือ struct ของตัวเอง? ฉันเพิ่งมาข้ามบทความนี้ในวันนี้ซึ่งสนับสนุนหลังและกล่าวถึงจุดที่ดีบางอย่างเกี่ยวกับ enums: http://gamesfromwithin.com/stupid-c-tricks-2-better-enums
(2) ในตัวอย่างนี้เมื่อทำงานภายในชั้นเรียนจะดีที่สุดในการเขียนรหัส enum เป็นCar::Color
หรือแค่Color
พอเพียง? (ฉันถือว่าอดีตนั้นดีกว่าในกรณีที่มีColor
enum อื่นที่ประกาศใน namespace ทั่วโลกด้วยวิธีนี้อย่างน้อยที่สุดเราก็ชัดเจนเกี่ยวกับ enum ที่เรากำลังอ้างอิง)
Car::Color getColor()
แต่void Car::setColor(Color c)
เนื่องจากในตัวsetColor
เรามีตัวระบุอยู่แล้ว