कुछ पुराने सी ++ कोड को संशोधित करते समय, मैंने कई bitflags को enums के रूप में परिभाषित किया।सी ++ में सुरक्षित (आर) बिटफ्लैग टाइप करें?
enum FooFlags
{
FooFlag1 = 1 << 0,
FooFlag2 = 1 << 1,
FooFlag3 = 1 << 2
// etc...
};
यह असामान्य नहीं है, लेकिन यह मुझे परेशान करता है कि जैसे ही आप झंडे गठबंधन करने के लिए शुरू के रूप में, आप प्रकार की जानकारी खो देते हैं।
int flags = FooFlag1 | FooFlag2; // We've lost the information that this is a set of flags relating to *Foo*
कुछ इतना पता चला है कि मैं onlyone इस से परेशान नहीं कर रहा हूँ पर खोज कर।
एक विकल्प झंडे को # डिफाइन या कॉन्स्ट इंटीग्रल के रूप में घोषित करना है, इसलिए बिटवाई ऑपरेशंस प्रकार (संभवतः) को परिवर्तित नहीं करेगा। इसके साथ समस्या यह है कि यह हमारे बिट सेट को इंक या अन्य enums के माध्यम से, असंबंधित झंडे के साथ मिलकर करने की अनुमति देता है।
मैं std::bitset और boost::dynamic_bitset से परिचित हूं, लेकिन न ही मेरे मुद्दे को हल करने के लिए डिज़ाइन किया गया है। मैं जो खोज रहा हूं वह सी # FlagsAttribute जैसा कुछ है।
मेरा सवाल यह है कि बिटफ्लैग के एक (अधिक) प्रकार के सुरक्षित सेट के लिए अन्य समाधान क्या हैं?
मैं नीचे अपना स्वयं का समाधान पोस्ट करूंगा।
आपके कार्यान्वयन के लिए उपयोग उदाहरण का कोई मौका? – Eric
@Eric, मुझे लगता है कि यह बहुत सीधे आगे होगा। आप वास्तव में क्या खोज रहे हैं? – luke
एक एनम 'ई' घोषित करने का एक सरल उदाहरण, 'फ्लैगसेट' को तुरंत चालू करना, और इसका उपयोग करना। निश्चित रूप से, मैं इसे काम कर सकता हूं, लेकिन एक उदाहरण इस जवाब को बेहतर बना देगा। –
Eric