2013-03-16 5 views
5

enum वर्ग (VS2012) मेरे उपयोग ++:स्टेटिक आयात 11 (जैसे एक enum वर्ग)

class matrix { 
public: 
    enum class operation_type {ADD, MULT}; 
    matrix(operation_type op); 
... 
} 

और एक अन्य टुकड़ा में मैं

matrix* m = new matrix(matrix::operation_type::ADD); 

का उपयोग नाम लंबे समय से कर रहे हैं , यह बहुत गन्दा हो जाता है।

क्या यह संभव है किसी भी तरह enum मूल्यों आयात करने के लिए इतना है कि मैं लिख सकते हैं:

matrix* m = new matrix(ADD); 

ही संबंध है नेस्ट कक्षाएं - मैं उन्हें आयात कर सकते हैं?

उत्तर

4

नहीं, यह संभव नहीं है।

आप operation_type हिस्सा छोड़ नहीं सकते, क्योंकि आपके द्वारा किए गए इस एक scoped गणना (और वह है क्या गणन सब के बारे में कर रहे हैं scoped है)। यदि आप इससे बचना चाहते हैं, तो आपको इसे एक अनकॉप्ड enum (class कीवर्ड को हटा देना) बनाना होगा।

इसके अलावा, matrix के बाहर आप using घोषणा के माध्यम से सदस्य नाम आयात नहीं कर सकते हैं जैसे matrix नामस्थान था। इसके अलावा, सी ++ 11 के पैराग्राफ 7.3.3/7 मानक:

एक उपयोग-घोषणा का नाम स्कॉप्ड एन्युमरेटर नहीं होगा।

+0

आपका मतलब है कि मेरे पास 'कक्षा ए {सार्वजनिक: कक्षा बी {}} है, तो मैं' ए :: बी 'का उपयोग करके नहीं लिख सकता, है ना? –

+0

@ जोशुआएमएन: मेरा मानना ​​है कि आप केवल ऐसा ही कर सकते हैं यदि आप इसे 'ए' के उप-वर्ग के अंदर लिखते हैं। –

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