C ++ प्रोजेक्ट में मैं काम कर रहा हूं, मेरे पास एक ध्वज प्रकार का मूल्य है जिसमें चार मान हो सकते हैं। उन चार झंडों को जोड़ा जा सकता है। झंडे डेटाबेस में रिकॉर्ड का वर्णन करते हैं और हो सकते हैं:
- नया रिकॉर्ड
- हटाए गए रिकॉर्ड
- संशोधित रिकॉर्ड
- मौजूदा रिकॉर्ड
अब, प्रत्येक रिकॉर्ड के लिए मैं इस विशेषता को रखना चाहता हूं, इसलिए मैं एक एनम का उपयोग कर सकता हूं:
enum { xNew, xDeleted, xModified, xExisting }
हालाँकि, कोड में अन्य स्थानों पर, मुझे यह चुनने की आवश्यकता है कि कौन से रिकॉर्ड उपयोगकर्ता को दिखाई देने वाले हैं, इसलिए मैं चाहूंगा कि इसे एक ही पैरामीटर के रूप में पास किया जा सके, जैसे:
showRecords(xNew | xDeleted);
तो, ऐसा लगता है कि मेरे पास तीन संभावित कारण हैं:
#define X_NEW 0x01
#define X_DELETED 0x02
#define X_MODIFIED 0x04
#define X_EXISTING 0x08
या
typedef enum { xNew = 1, xDeleted, xModified = 4, xExisting = 8 } RecordType;
या
namespace RecordType {
static const uint8 xNew = 1;
static const uint8 xDeleted = 2;
static const uint8 xModified = 4;
static const uint8 xExisting = 8;
}
अंतरिक्ष की आवश्यकताएं महत्वपूर्ण हैं (बाइट बनाम इंट) लेकिन महत्वपूर्ण नहीं। परिभाषित करने के साथ मैं प्रकार की सुरक्षा खो देता हूं, और enum
मैं कुछ स्थान (पूर्णांक) खो देता हूं और संभवत: जब मुझे एक बिटवाइज़ ऑपरेशन करना होता है तो मुझे कास्ट करना पड़ता है। साथ const
मैं मुझे लगता है कि यह भी खो प्रकार सुरक्षा के बाद से एक यादृच्छिक uint8
गलती से में मिल सकता है।
क्या कोई और क्लीनर तरीका है?
यदि नहीं, तो आप क्या उपयोग करेंगे और क्यों?
PS बाकी कोड बिना #define
s के आधुनिक C ++ को साफ करते हैं , और मैंने कुछ स्थानों में नामस्थान और टेम्पलेट्स का उपयोग किया है, इसलिए वे प्रश्न से बाहर नहीं हैं।
enum RecordType : uint8_t
प्रकार की सुरक्षा को जोड़ती enum
है uint8_t
, हालांकि आपको अभी भी बिटवाइज़ ऑपरेटरों को प्रदान करना होगा।