क्या दो enums के बीच परिवर्तित करने के लिए एक कास्ट ऑपरेटर अधिभार करने का कोई तरीका है?दो enums के बीच अधिभार कास्ट ऑपरेटर
मेरी कोड में मैं
enum devStatus
{
NOT_OPERATING,
INITIALISING,
DEGRADED,
NORMAL
};
enum dataStatus
{
UNAVAILABLE = 1,
DEGRADED,
NORMAL
}
है जहां NOT_OPERATING और अनुपलब्ध को आरंभ नक्शा; सीधे और पूरे नक्शे पर नक्शा। ये बाहरी इंटरफेस द्वारा तय किए गए हैं।
मैं एक तरह से devStatus
और dataStatus
के बीच परिवर्तित करने के लिए देख रहा हूँ और की तरह कुछ लिखने में सक्षम होना चाहते हैं:
devStatus devSts;
getDeviceStatus(&devSts);
dataStatus dataSts = (dataStatus)devSts;
मुझे पता है कि अगर इन कक्षाओं में थे, मैं devStatus::operator dataStatus()
लिख सकता है यह करने के लिए। क्या एक enums के लिए ऐसा करने का कोई तरीका है?
मैं सिर्फ एक मुक्त समारोह dataStatus devStatus2dataStatus(const devStatus& desSts)
क्या बजाय प्रत्येक enum के लिए एक वर्ग को परिभाषित करने के फायदे/disadvantes, और रूपांतरण ऑपरेटरों कर रहे हैं? डाउनसाइड अधिक बॉयलरप्लेट कोड पर। ऊपरी नामस्थान के आस-पास तैरने वाले अपरिवर्तनीय फ़ंक्शन पर - हालांकि ऐसा कहा जाता है कि enums पहले से ही वहां के आसपास तैर रहे हैं। क्षमता संकलक अनुकूलन के साथ समान होना चाहिए। –
मैं मानता हूं कि सी ++ एनम्स के लिए नाम स्कॉइंग आदर्श नहीं है, लेकिन प्रत्येक enum के लिए कक्षा बनाने के खरगोश छेद को नीचे किए बिना, एनम घोषणा और रूपांतरण नाम को नामस्थान के साथ लपेटकर आसानी से बचा जा सकता है। उस रास्ते पर जाकर तार्किक मुद्दों को सामने लाया गया है जैसे कि एक/है-रिश्ते और किस ऑपरेटरों को इस प्रकार के लिए उपलब्ध कराया जाना चाहिए। मुझे लगता है कि ऐसा करना शायद अधिकतर गणनाओं के लिए अधिक है। –
मैंने एक उदाहरण नामस्थान घोषणा और नमूना उपयोग के साथ उत्तर अद्यतन किया। –