के तहत एक enum घोषित करना निम्नलिखित कोड स्निपेट में, Color
enum को 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
enum के दायरे को सीमित करने के लिए एक अच्छा तरीका है? या, क्या मुझे इसे Car
कक्षा के बाहर घोषित करना चाहिए, लेकिन संभवतः अपने नामस्थान या संरचना के भीतर? मैं आज इस लेख में आया हूं, जो उत्तरार्द्ध की वकालत करता है और enums के बारे में कुछ अच्छे बिंदुओं पर चर्चा करता है: http://gamesfromwithin.com/stupid-c-tricks-2-better-enums।
(2) इस उदाहरण में, जब भीतर वर्ग काम कर रहा है, यह सबसे अच्छा Car::Color
के रूप में enum कोड करने के लिए है, या बस Color
पर्याप्त होगा? (मुझे लगता है कि पूर्व बेहतर है, अगर किसी अन्य Color
enum वैश्विक नामस्थान में घोषित किया गया है। इस तरह, कम से कम, हम इस बात के बारे में स्पष्ट हैं कि हम संदर्भ दे रहे हैं।)
2. हां और नहीं। 'कार :: रंग प्राप्त करें रंग()' लेकिन 'शून्य कार :: सेटकॉलर (रंग सी)' क्योंकि 'सेटकॉलर' में हमारे पास पहले से ही विनिर्देशक है। –