2008-11-26 20 views
7

द्वारा प्राप्त करें मैं सी ++ में सोच रहा था अगर मेरे पास एक एनम है तो मैं दूसरी अनुक्रमणिका में मूल्य का उपयोग कर सकता हूं? उदाहरण के लिए मेरे पासएनम सी ++ इंडेक्स

enum Test{hi, bye}; 

यदि मैं 'हाय' चाहता हूं, तो क्या मैं टेस्ट [0], धन्यवाद जैसे कुछ कर सकता हूं।

+0

नहीं। लेकिन यदि आप उपयोग-मामले देते हैं, तो अच्छे विकल्प हो सकते हैं। –

उत्तर

1

मूल्यों के लिए मानचित्र मानचित्र नाम।

int myInteger = 0; 
Test myValue = (Test)myInteger; 

नोट, हालांकि, कि myValue: आपके मामले में, (int) हाय 0 मान, और (int) अलविदा तुम एक डाली उपयोग कर सकते हैं 1. के एक मूल्य हाय के मूल्य प्राप्त करने के लिए होता है यदि मेरा इंटेगर सीमा से बाहर है तो एक अमान्य एनम मान हो सकता है।

0

नहीं, लेकिन आपको डाली सकता पूर्णांक

Test test = (Test)0; 
+0

यह एक बहुत बुरा विचार है, क्योंकि आप उन मानों के लिए उचित इंडेक्स होने की गारंटी नहीं देते हैं। –

0

आपका सबसे अच्छा विकल्प कुछ इस तरह हो सकता है से:

enum Test{hi = 0, bye}; 

तो फिर तुम बस संख्या 0 के साथ 'हाय' का उल्लेख कर सकते हैं, और 'अलविदा' के साथ 1.

हालांकि यह वास्तव में पहली जगह में गणना का उपयोग करने के पूरे उद्देश्य को हरा देता है।

17

हां और नहीं। यदि आपके एनम के पास स्पष्ट मूल्य नहीं हैं तो यह संभव है। स्पष्ट मूल्यों के बिना, घोषणा के क्रम में enum मानों को संख्यात्मक मान 0-N दिए जाते हैं। उदाहरण के लिए ...

enum Test { 
    hi, // 0 
    bye // 1 
} 

इसका मतलब यह है अनुक्रमित सिर्फ एक शाब्दिक मूल्य में तब्दील हो कि।

Test EnumOfIndex(int i) { return static_cast<Test>(i); } 

यह निश्चित रूप से रनटाइम पर 0 सत्यापन करता है और जैसे ही आप एक स्पष्ट मूल्य जोड़ते हैं, तो यह टूट जाएगा। लेकिन यह डिफ़ॉल्ट परिदृश्य में काम करेगा।

5

अन्यथा निर्दिष्ट किए जाने तक, enums 0 पर संख्या शुरू करना शुरू करता है, और प्रत्येक प्रविष्टि द्वारा 1 वृद्धि करता है।

enum Test 
{ 
    hi, //0 
    bye, //1 
    count //2 
} 

आप enum के प्रकार के लिए एक पूर्णांक डाली जैसे मूल्य आप चाहते हैं, प्राप्त करने के लिए कर सकते हैं:

for(int i = 0; i < count; i++) 
{ 
    DoSomething((Test)i); 
} 
+6

static_cast (i) के बजाय (टेस्ट) का उपयोग करें I – jab

1

निर्भर करता है: आप की तरह बातें करते हैं की सुविधा देता है कौन सा

(Test)0; 
//or 
Test(0); 

"मैं चाहता हूं" हाय से आपका क्या मतलब है।

यदि आपका मतलब है कि आप मूल्य चाहते हैं, तो आप इसे एक int कास्टिंग करके प्राप्त कर सकते हैं, जैसा कि अन्य ने कहा है।

एनमेर प्रकार के लिए एक संख्यात्मक शाब्दिक कास्टिंग आमतौर पर व्यर्थ है - यदि आप जानते हैं कि आप किस मूल्य की अपेक्षा कर रहे हैं, तो आप नाम का उपयोग कर सकते हैं। इस तरह, enum आपके कोड को तोड़ने के बिना बदल सकते हैं। मुझे लगता है कि यह संभव है कि कुछ वास्तव में अजीब चल रहा है, जहां किसी ने एक enum बनाया है, और दस्तावेज किया है कि "3" का मतलब है, लेकिन यह कौन सा enum मान है। लेकिन फिर आप एपीआई को ठीक करना चाहते हैं।

रनटाइम पर ज्ञात एक पूर्णांक मान कास्टिंग करना उपयोगी हो सकता है यदि आपके पास डेटा को क्रमबद्ध किया गया है। जब तक आप जानते हैं कि यह enum की सीमा में है, परिणाम परिभाषित किया गया है।

यदि आपका मतलब है कि आप स्ट्रिंग "हाय" चाहते हैं, तो आपके पास यह नहीं हो सकता है। जावा के विपरीत, सी ++ में समेकित प्रकारों में मानों के नाम केवल संकलन समय पर मौजूद हैं, रनटाइम पर नहीं, और केवल एक दिशा में मानचित्र हैं।

0

यदि आप {हाय या अलविदा} के रूप में लौटने के मान को छोड़ रहे हैं, तो आपको उस तरह का मूल्य नहीं मिल सकता है।

मैं सुझाव है कि नहीं होगा इस inorder किया जाना वास्तविक मूल्य प्राप्त करने के लिए, लेकिन यह हैक enum को

string return_value(int index) 
{ 
string temp = ""; 
switch (index) 
{ 
case 1: temp = "hi" 
break; 
case 2: temp = "bye"; 
break; 
defualt : 
break; 
} 
return temp; 
} 

typecasting फिर सूचकांक वापसी होगी के रूप में इस्तेमाल किया जा सकता है, लेकिन आप कुछ अन्य enum चर

को असाइन कर सकते
संबंधित मुद्दे