मेरे पास कुछ सामान्य कोड है जो सी ++ 11 enum class
प्रकारों का उपयोग करके निर्दिष्ट ध्वज के साथ काम करता है। एक कदम पर, मैं जानना चाहता हूं कि ध्वज में से किसी भी बिट को सेट किया गया है या नहीं। वर्तमान में, मैं कोड का उपयोग कर रहा:मैं एक बूलियन संदर्भ में एनम कक्षा का उपयोग कैसे कर सकता हूं?
if (flags != static_cast<E>(0)) // Works, but ugly.
मैं भी एक सब शून्य क्षेत्र के लिए एक विशेष नाम निर्दिष्ट करने के, जो और अधिक पठनीय है, लेकिन यह का उपयोग कर किसी पर अपना नामकरण सम्मेलनों लगाता उपयोगकर्ताओं को बाध्य कर सकते हैं:
if (flags != E::none) // Works, if you manually define none = 0.
लेकिन इनमें से कोई भी पारंपरिक रूप के रूप में अच्छी तरह से पढ़ता है:
if (flags) // Doesn't work with class enums.
यह एक बूलियन संदर्भ में एक वर्ग enum मूल्यांकन करने के लिए एक कस्टम समारोह निर्दिष्ट करने के लिए संभव है?
वहाँ एक विशेष कारण आप द्विआधारी झंडे उपयोग नहीं कर सकते है? वे स्वच्छ और कुशल हैं। किसी भी तरह, enum वर्ग मान संख्याओं में परिवर्तित नहीं किया जा सकता है। आपको झंडे का उपयोग करना होगा! = ई :: कोई भी अगर आप गणना कर रहे हैं। आप जानते हैं, आप केवल एक गैर-एनम कक्षा बना सकते हैं और स्टेटिक कॉन्स int का उपयोग कर सकते हैं जो भी = 1, स्थिर कॉन्स int जो भी_else = 2 ... आदि। और केवल कुछ ऑपरेटरों को अधिभारित करें। –
@OrgnlDave: "बाइनरी झंडे" का अर्थ क्या है, बूल? बिटफिल्ड के रूप में वे अक्सर आईबी/यूबी होते हैं और नियमित संरेखण के साथ मैं उन्हें कुशल नहीं कहूंगा, न ही अगर मुझे एक समय में एकाधिक लोगों की प्रतिलिपि बनाना है तो साफ करें। मुझे स्थैतिक स्याही का सुझाव देने में मूल्य नहीं दिखता है, मैं केवल नियमित enum का उपयोग कर सकता हूं और कम से कम एक प्रकार की सुरक्षा प्राप्त कर सकता हूं। –
"मैं सिर्फ नियमित enum का उपयोग कर सकता हूं और कम से कम एक प्रकार की सुरक्षा प्राप्त कर सकता हूं।" फिर आपको यह स्वीकार करना होगा कि इसके साथ आप अब बिट्स के बारे में बात नहीं करेंगे। – GManNickG