अपने कोड को फिर से लिखने के बिना एक वर्ग में एक एनम को फिर से भरने के लिए एक बहुत संगत क्षमता ( ability ) है, जिसका अर्थ है कि प्रभावी रूप से आप वह कर सकते हैं जो आप बहुत अधिक संपादन के बिना करने के लिए कह रहे थे।
(,) जैसा कि एलिमेंट डब्ल्यू एक टिप्पणी में बताते हैं , टाइप_ट्रेट्स निर्भर कोड काम नहीं करेगा, इसलिए जैसे कोई ऑटो का उपयोग नहीं कर सकता है, आदि ऐसे सामान को संभालने का कुछ तरीका हो सकता है, लेकिन अंत में एक एनम को एक वर्ग में परिवर्तित कर रहा है, आदि। और यह हमेशा C ++ को हटाने के लिए एक गलती है
enum struct
और enum class
विनिर्देशों इसलिए इस का हिस्सा नहीं देखते हुए के बारे में कर रहे हैं।
आपकी मूल गणना उदा 'पालतू' है (यह केवल एक उदाहरण के रूप में है!)।
enum pet {
fish, cat, dog, bird, rabbit, other
};
(1) आप इसे उदाहरण के लिए पेटीएम में संशोधित करते हैं (ताकि इसे अपने मौजूदा कोड से छिपा सकें)।
enum petEnum {
fish, cat, dog, bird, rabbit, other
};
(2) आप इसके नीचे एक नई श्रेणी की घोषणा जोड़ते हैं (मूल एनम के साथ नाम)
class pet {
private:
petEnum value;
pet() {}
public:
pet(const petEnum& v) : value{v} {} //not explicit here.
operator petEnum() const { return value; }
pet& operator=(petEnum v) { value = v; return *this;}
bool operator==(const petEnum v) const { return value == v; }
bool operator!=(const petEnum v) const { return value != v; }
// operator std::string() const;
};
(३) अब आप अपने पालतू जानवरों की कक्षा को जो भी पसंद कर सकते हैं, जोड़ सकते हैं। जैसे। एक स्ट्रिंग ऑपरेटर
pet::operator std::string() const {
switch (value) {
case fish: return "fish";
case cat: return "cat";
case dog: return "dog";
case bird: return "bird";
case rabbit: return "rabbit";
case other: return "Wow. How exotic of you!";
}
}
अब आप उदाहरणार्थ std :: cout ... का उपयोग कर सकते हैं
int main() {
pet myPet = rabbit;
if(myPet != fish) {
cout << "No splashing! ";
}
std::cout << "I have a " << std::string(myPet) << std::endl;
return 0;
}