एनम क्लासेस ("नई एनम", "स्ट्रॉन्ग एनम") पारंपरिक सी ++ एन्यूमरेशन्स के साथ तीन समस्याओं का समाधान करती हैं:
- पारंपरिक
enums
रूप से रूपांतरित होता है int
, जिससे त्रुटियां होती हैं जब कोई व्यक्ति पूर्णांक के रूप में कार्य करने के लिए गणना नहीं चाहता है।
- पारंपरिक रूप
enums
से आस-पास के दायरे में उनके प्रगणकों को निर्यात किया जाता है, जिससे नाम की हानि होती है।
- अंतर्निहित प्रकार को
enum
निर्दिष्ट नहीं किया जा सकता है, जिससे भ्रम, संगतता समस्याएं पैदा होती हैं, और आगे की घोषणा को असंभव बना देता है।
enum class
("मजबूत एनम") दृढ़ता से टाइप और स्कोप किए गए हैं:
enum Alert { green, yellow, orange, red };
enum class Color { red, blue };
enum class TrafficLight { red, yellow, green };
Alert a = 7;
Color c = 7;
int a2 = red;
int a3 = Alert::red;
int a4 = blue;
int a5 = Color::blue;
Color a6 = Color::blue;
जैसा कि दिखाया गया है, पारंपरिक एनम हमेशा की तरह काम करते हैं, लेकिन अब आप वैकल्पिक रूप से एनम के नाम के साथ अर्हता प्राप्त कर सकते हैं।
नए एनम "एनम क्लास" हैं क्योंकि वे पारंपरिक एनुमरेशंस (नाम मूल्यों) के पहलुओं को वर्गों के पहलुओं (स्कोप्ड सदस्यों और रूपांतरणों की अनुपस्थिति) के साथ जोड़ते हैं।
अंतर्निहित प्रकार को निर्दिष्ट करने में सक्षम होने के लिए सरल अंतर्संचालनीयता और गणना के आकार की गारंटी देता है:
enum class Color : char { red, blue };
enum class TrafficLight { red, yellow, green };
enum E { E1 = 1, E2 = 2, Ebig = 0xFFFFFFF0U };
enum EE : unsigned long { EE1 = 1, EE2 = 2, EEbig = 0xFFFFFFF0U };
यह आगे की घोषणाओं को भी सक्षम बनाता है:
enum class Color_code : char;
void foobar(Color_code* p);
enum class Color_code : char { red, yellow, green, blue };
अंतर्निहित प्रकार हस्ताक्षरित या अहस्ताक्षरित पूर्णांक प्रकारों में से एक होना चाहिए; डिफ़ॉल्ट है int
।
मानक पुस्तकालय में, enum
कक्षाओं का उपयोग किया जाता है:
- मैपिंग सिस्टम विशिष्ट त्रुटि कोड: में
<system_error>
: enum class errc
;
- सूचक सुरक्षा संकेतक: में
<memory>
:enum class pointer_safety { relaxed, preferred, strict };
- I / O स्ट्रीम त्रुटियाँ: में
<iosfwd>
:enum class io_errc { stream = 1 };
- अतुल्यकालिक संचार त्रुटि हैंडलिंग: में
<future>
:enum class future_errc { broken_promise, future_already_retrieved, promise_already_satisfied };
इनमें से कई में ऑपरेटर हैं, जैसे कि ==
परिभाषित।
enum class Colours
और करने की आवश्यकता हैenum class Fruits
। क्योंकि जब मैंने VS 2010 में कोड लिखा था। यह एक त्रुटि के"expects a defination or a tag name"
तहत आता हैclass
।