2011-06-10 9 views
5
class A { 
    public: enum class { HELLO, WORLD }; 
}; 

कि नाम से जाना जाता है, एक class अंदर घोषित एक बेहतर विचार है एक सरल enum (बल्कि enum class से), क्योंकि यह पहले से ही class पहचान के साथ आपके द्वारा लिखा गया है। लेकिन अभी भी ऊपर बयान वैध C++0x हस्ताक्षर है। अब एक अज्ञात enum class के बाहर कैसे पहुंचे?कक्षा के अंदर encapsulated अज्ञात "enum वर्ग" का उपयोग कैसे करें?

int i = A::HELLO; // error: ‘HELLO’ is not a member of ‘A’ 

उत्तर

8

वास्तव में, यह मान्य नहीं है। C++ 0x एफ डी आई का कहना है (9.2p1)

जब दोस्तों (11.3) घोषित करने के लिए या एक व्युत्पन्न वर्ग में एक आधार वर्ग के एक सदस्य के नाम पर लागू करने के लिए (7.3.3) का इस्तेमाल किया छोड़कर, सदस्य घोषणा कक्षा के सदस्यों को घोषित करती है, और प्रत्येक ऐसे सदस्य-घोषणा कक्षा के कम से कम एक सदस्य का नाम घोषित करेगी।

आपके मामले में, वर्ग के दायरे में कोई गणक नाम नहीं दिया गया है और कोई गणना नाम या तो पेश नहीं किया गया है। इसलिए, उस सदस्य-घोषणा द्वारा किसी भी सदस्य का नाम पेश नहीं किया गया है।

संपादित करें: और वास्तव में, गणना घोषणा की अधिक प्रत्यक्ष निषेध है। 7.2p2:

वैकल्पिक पहचानकर्ता एक दायरे वाले गणन की घोषणा में छोड़े गए नहीं किया जाएगा।

+0

जिसका अर्थ है कि हम इसकी वस्तु को कन्स्ट्रक्टर में शुरू नहीं कर सकते हैं। तो इस तरह के 'enum' पूरी दुनिया से पूरी तरह से डिस्कनेक्ट हो जाएगा, सही? – iammilind

संबंधित मुद्दे