2010-08-21 9 views
5

मेरे पास StackID नामक एक गणना है, और मेरे पूरे कोड में मुझे static_cast पर int काफी कुछ है - उदा।क्या हर समय static_cast <int> का उपयोग करने का कोई विकल्प है?

StackID somestack; 
int id = static_cast<int>(somestack); 

क्या इस कलाकार को बार-बार करने के लिए एक शॉर्टेंड विकल्प है? मैंने "निहित" रूपांतरणों के बारे में सुना है - क्या मैं यहां कुछ उपयोग कर सकता हूं?

(संभवतः this question से संबंधित)

+4

आपको क्या लगता है कि आपको उन्हें बिल्कुल सही करने की आवश्यकता है? वे enum के अधिकांश उपयोग के लिए enums रह सकते हैं। – rettops

+0

एक enum के साथ काम करने के लिए यह एक असली प्रकार के रूप में इसका इलाज करना है। आपका कोड 'int id' नहीं होना चाहिए, यह' StackID id = somestack' होना चाहिए। इसे कभी भी एक मूल्य से निर्धारित नहीं किया जाना चाहिए, बल्कि केवल enum स्थिरांक द्वारा। –

उत्तर

10

वहाँ कुछ आप के बजाय का उपयोग करना चाहिए है? शायद ऩही। यदि आप enum पर int बना रहे हैं तो मैं सवाल करूंगा कि क्या आप enums का सही ढंग से उपयोग कर रहे हैं (या यदि आपको विरासत एपीआई के साथ इंटरफ़ेस करना है।) ऐसा कहा जा रहा है कि आप को इट्स के लिए static_cast enums में नहीं हैं। यह स्वाभाविक रूप से होगा।

enums और पर एमएसएन से this लेख देखें enum-> पूर्णांक और int-> enum

+2

+1 enums का सही उपयोग नहीं कर रहा है। – casablanca

+1

शायद स्पष्ट करें कि "स्वाभाविक रूप से होगा"? विशिष्ट होने के लिए, आप 'int id = static_cast (somestack) को प्रतिस्थापित कर सकते हैं;' int id = somestack; ', यदि आप चाहते हैं। कोड पढ़ने वाले किसी को यह महसूस करने की संभावना कम होती है कि एक रूपांतरण हो रहा है, लेकिन यदि आपके enums में केवल कुछ छोटी मान (MAX_INT से कम) शामिल हैं, तो इससे कोई फर्क नहीं पड़ता। –

+0

@ स्टेव जेसोप: कोई भी यह जांचने के लिए एक static_assert पेश कर सकता है कि 'enum' सीमाओं पर फैलता नहीं है। सापेक्ष आकारों की तुलना ('sizeof' के साथ) काफी मदद कर सकती है। –

0

Enum मान डिफ़ॉल्ट रूप से शून्य से शुरू और बढ़ाने पर रखेंगे (यदि आप एक static_cast उपयोग करने के लिए। क्या ज़रूरत है जहां)। मूल रूप से, enum स्थिरांक स्वयं पूर्णांक स्थिरांक हैं। उन्हें स्पष्ट रूप से int टाइप करने की आवश्यकता नहीं है। जब हम अद्वितीय मूल्यों के साथ त्रुटि कोड जैसे एकाधिक स्थिरांक का प्रतिनिधित्व करना चाहते हैं, तो # परिभाषित विवरणों के बजाय, हम Enum का उपयोग कर सकते हैं।

2

क्या इस कलाकार को बार-बार करने के लिए एक शॉर्टेंड विकल्प है?

अच्छा, आपको नहीं पता होगा। यह आपका भाग्यशाली दिन है! क्योंकि, हाँ, वहाँ एक आसान तरीका है:

int id = somestack; 

किसी भी enum मूल्य एक int में परोक्ष परिवर्तनीय है।

वैसे भी, इस मुद्दे के बारे में आपके दो प्रश्नों से, मैं संबंधित आवाजों में शामिल हो जाऊंगा कि क्या enum वास्तव में आप यहां क्या चाहते हैं। (मैं यह कह रहा हूं कि यह wring है, मुझे यह जानने के लिए आपकी समस्या के बारे में बहुत कम पता है। लेकिन जो मुझे पता है उससे यह संदिग्ध लगता है।)

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