2016-11-11 21 views
5

c++11 कोड में हर बार जब मैं एनम वैल्यू का उपयोग करता हूं तो एक विशिष्ट एनम क्वालीफायर का उल्लेख करना अच्छा होगा - क्योंकि यह एक नया कोड है और इसे बहुत से दोबारा प्रतिक्रिया दी जाती है।हार्डकोडिंग एनम प्रकार से बचें

enum abc { a,b,c }; 
// some long code of events which returns the enum's value 
auto e = []()->abc{return abc::b;}(); 
if (e == std::declval(e)::a) { ... 
तो संभव नहीं

C++11 में C++14 या 17 में यह संभव हो जाएगा:

कि प्रयोजन के लिए यह इस छद्म कोड की अंतिम पंक्ति की भावना में संभव कुछ है?

+1

आप जब तक यह एक 'enum class' है enum के नाम का उपयोग करने के जरूरत नहीं है। आप बस 'if (e == a) ' –

+0

का उपयोग कर सकते हैं' कक्षा 'बग होने के लिए बाहर निकला। –

उत्तर

8

आप निकट पहुंच गए हैं, तो आप decltype उपयोग कर सकते हैं:

if (e == decltype(e)::a) { 
    ... 
+0

मुझे यहां क्या याद आ रहा है, क्यों न केवल 'काम' सादा है? इस मामले में –

+0

@ कैप्टन जीराफ, यह होगा। लेकिन अगर नाम को नामस्थान में घोषित किया गया है, या एक वर्ग सदस्य है या एक enum वर्ग है, तो यह टूट जाएगा। – krzaq

+0

आह, ज़ाहिर है। धन्यवाद। –

संबंधित मुद्दे