दिलचस्प पोस्ट
उद्देश्य-सी में स्थिर एक एकल सेट से विशिष्ट आकार के सभी संयोजनों को उत्पन्न करने के लिए PHP एल्गोरिथम javafx स्वचालित रीसाइज़िंग और बटन पैडिंग jQuery घड़ी div मेरी एसक्यूएल में DATE के रूप में डाटैटईम कैसे डाली जाए? जावा का उपयोग कर सेलेनियम वेबड्राइवर का उपयोग करके क्रोम प्रोफ़ाइल लोड करें इस नियमित अभिव्यक्ति में ऋणात्मक दशमलव संख्याओं में मैं कैसे शामिल करूं? ADO.NET प्रदाता के लिए अपरिवर्तनीय नाम 'System.Data.SqlClient' के साथ कोई इकाई फ़्रेमवर्क प्रदाता नहीं मिला फ़ंक्शन के अंदर वैश्विक वैरिएबल तक नहीं पहुंच सकता है पोस्ट पैरामीटर के रूप में jQuery भेजने स्ट्रिंग प्रत्येक शब्द के पहले अक्षर को कैपिटल कैसे करें, जैसे 2-शब्द का शहर? कैसे सी कार्यक्रम में तारीख और समय मूल्य प्राप्त करने के लिए वैरिएबल द्वारा जावास्क्रिप्ट ओब्जेक्ट की सेट करें टेम्प्लेट फंक्शन के टेम्पलेट सदस्य फ़ंक्शन का टेम्पलेट क्लास _GET में URL पैरामीटर का अधिकतम आकार

बेस एनम वर्ग उत्तराधिकार

क्या कोई ऐसा पैटर्न है जहां मुझे सी ++ में एक एन्यूम से एन्यूम का वारिस हो सकता है ??

ऐसा कुछ:

enum eBase { one=1, two, three }; enum eDerived: public Base { four=4, five, six }; 

Solutions Collecting From Web of "बेस एनम वर्ग उत्तराधिकार"

संभव नहीं। Enums के साथ कोई विरासत नहीं है

आप इसके बजाय नामित inst ints के साथ कक्षाओं का उपयोग कर सकते हैं।

उदाहरण:

 class Colors { public: static const int RED = 1; static const int GREEN = 2; }; class RGB : public Colors { static const int BLUE = 10; }; class FourColors : public Colors { public: static const int ORANGE = 100; static const int PURPLE = 101; }; 
 #include <iostream> #include <ostream> class Enum { public: enum { One = 1, Two, Last }; }; class EnumDeriv : public Enum { public: enum { Three = Enum::Last, Four, Five }; }; int main() { std::cout << EnumDeriv::One << std::endl; std::cout << EnumDeriv::Four << std::endl; return 0; } 

आप इसे सीधे नहीं कर सकते, लेकिन आप इस आलेख के समाधान का उपयोग करने की कोशिश कर सकते हैं।

मुख्य विचार सहायक टेम्प्लेट वर्ग का उपयोग करना है जिसमें मान मान है और जिस प्रकार कास्ट ऑपरेटर है। यह देखते हुए कि enum के लिए अंतर्निहित प्रकार int आप इस धारक वर्ग को अपने कोड में seamlessly enum के बजाय उपयोग कर सकते हैं।

दुर्भाग्य से यह सी ++ 14 में संभव नहीं है मुझे उम्मीद है कि हमें सी ++ 17 में ऐसी भाषा की सुविधा होगी। जैसा कि आप पहले से ही आपकी समस्या के लिए कुछ समाधान प्राप्त कर चुके हैं, मैं एक समाधान प्रदान नहीं करूँगा

मैं यह इंगित करना चाहूंगा कि शब्दांकन "विस्तार" होना चाहिए, "वंशानुक्रम" नहीं होना चाहिए विस्तार से अधिक मूल्यों की अनुमति मिलती है (जैसा कि आप अपने उदाहरण में 3 से 6 मानों पर कूद रहे हैं), जबकि वंशानुक्रम किसी दिए गए बेस क्लास में अधिक बाधा डालता है, ताकि संभावनाओं का सेट कम हो जाए। इसलिए, संभावित कास्टिंग उत्तराधिकार से ठीक विपरीत काम करेगा। आप मूल वर्ग के लिए व्युत्पन्न वर्ग डालें और वर्ग उत्तराधिकार के साथ उप-कविता न दें। लेकिन जब एक्सटेंशन होते हैं तो आपको "अपने विस्तार के लिए बेस क्लास डालने में सक्षम होना चाहिए" और उप-कविता नहीं मैं कह रहा हूँ "चाहिए" क्योंकि, जैसा कि मैंने कहा कि ऐसी भाषा की सुविधा अभी भी मौजूद नहीं है।

इस बारे में कैसा है? ठीक एक उदाहरण हर संभव मूल्य के लिए बनाया गया है, लेकिन इसके अलावा इसके बहुत लचीले क्या कोई डाउनसाइड्स है?

ज:

 class BaseEnum { public: static const BaseEnum ONE; static const BaseEnum TWO; bool operator==(const BaseEnum& other); protected: BaseEnum() : i(maxI++) {} const int i; static int maxI; }; class DerivedEnum : public BaseEnum { public: static const DerivedEnum THREE; }; 

सीपीपी:

 int BaseEnum::maxI = 0; bool BaseEnum::operator==(const BaseEnum& other) { return i == other.i; } const BaseEnum BaseEnum::ONE; const BaseEnum BaseEnum::TWO; const DerivedEnum DerivedEnum::THREE; 

उपयोग:

 BaseEnum e = DerivedEnum::THREE; if (e == DerivedEnum::THREE) { std::cerr << "equal" << std::endl; } 

जैसा कि bayda द्वारा कहा गया है, bayda (और / या नहीं) की नहीं है, इसलिए मैंने bayda करके अपने bayda लिए निम्नलिखित दृष्टिकोण लिया है:

 typedef struct { enum { ONE = 1, TWO, LAST }; }BaseEnum; typedef struct : public BaseEnum { enum { THREE = BaseEnum::LAST, FOUR, FIVE }; }DerivedEnum; 

ठीक है, यदि आप enum क्लास में एक ही नाम के साथ enum को परिभाषित करेंगे और बेस क्लास में enum अंतिम आइटम से इसे शुरू करेंगे, तो आप लगभग जो भी आप चाहते हैं – विरासत में मिले enum इस कोड को देखें:

 class Base { public: enum ErrorType { GeneralError, NoMemory, FileNotFound, LastItem } } class Inherited: public Base { enum ErrorType { SocketError = Base::LastItem, NotEnoughBandwidth, } } 

असंभव।
लेकिन आप कक्षा में अज्ञात रूप से enum को परिभाषित कर सकते हैं, फिर व्युत्पन्न कक्षाओं में अतिरिक्त enum स्थिरांक जोड़ सकते हैं।