2009-12-09 11 views
25

एक देशी कोड enum से प्रबंधित कोड enum जो एक ही enum मूल्यों को रोकने के लिए कास्टिंग (C++/CLI में) करने का सही तरीका क्या है? सी ++/सीएलआई में उदाहरण के लिए (int) उदाहरण के लिए कास्टिंग के सी # तरीके का उपयोग करने में कोई अंतर है।C++/CLI: अप्रबंधित enum से प्रबंधित enum करने के लिए कास्टिंग

उत्तर

37

enum shape_type_e 
{ 
    stUNHANDLED  = 0,   //!< Unhandled shape data. 
    stPOINT   = 1    //!< Point data. 
    ... 
}; 

मान लिया जाये कि अपने मूल कोड है और अपने प्रबंधित कोड

public enum class ShapeType 
{ 
    Unhandled = 0, 
    Point  = 1, 
    ... 
}; 

आप

shape_type_e nativeST = stPOINT; 
ShapeType managedST = static_cast<ShapeType>(nativeST); 
Debug.Assert(managedST == ShapeType::Point); 

मैं हमेशा static_cast का उपयोग का उपयोग कर देशी करने में कामयाब से डाल सकता है, कास्टिंग का सी # रास्ता नहीं।

+2

उपरोक्त कोड से, मुझे लगता है कि आप देशी से प्रबंधित enum से कास्टिंग कर रहे हैं। दूसरे तरीके से देशी से प्रबंधित करने के बारे में क्या? – Lopper

+5

स्टेटिक कास्ट आपके दोस्त दोनों तरीके हैं ... देशीST = static_cast (प्रबंधितST); – mcdave

+0

धन्यवाद mcdave! :) – Lopper

1

यह निर्भर करता है। उदाहरण के लिए, यदि आपके पास एक सीएलआई एनम है जिसमें अंतर्निहित प्रकार का यूहॉर्ट है, तो इसमें 257 की कमी नहीं हो सकती है। डिफ़ॉल्ट रूप से सीएलआई एनम int पर आधारित है, जो ज्यादातर मामलों में ठीक होना चाहिए। यदि आपका मूल सी ++ कोड अंतर्निहित प्रकार के रूप में 32 बिट इन्स/64 बिट इन्स को बिना अंतर्निहित प्रकार के रूप में उपयोग करता है, तो अपने सीएलआई एनम के आधार को UInt32, लंबे या उलझन में स्विच करें।

+2

मुझे यह समस्या नहीं होगी क्योंकि दोनों enum प्रकार int हैं। लेकिन इस मामले में किस प्रकार का कास्ट इस्तेमाल किया जाना चाहिए? क्या यह const_cast, static_cast, dynamic_cast, reinterpret_cast, safe_cast या सिर्फ C# cast होना चाहिए (एक उदाहरण है (int))? – Lopper

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