2013-07-24 9 views
5

मैं इस तरह एक enum है:typedef और enum या enum वर्ग

enum class truth_enum { 
    my_true = 1, 
    my_false = 0 
}; 

मैं ग्लोबल नेम स्पेस को my_true बेनकाब करने के लिए सक्षम होने के लिए चाहते हैं (वास्तव में, यह एक enum वर्ग है), तो यह है कि मैं क्या कर सकते हैं इस:

char a_flag = my_true; 

या कम से कम:

char a_flag = (char)my_true; 
इसके बजाय इस बात का

:

char a_flag = truth_enum::my_true; 

क्या यह संभव है?

मैं कुछ इस तरह की कोशिश की है:

typedef truth_enum::my_true _true_; 

मैं त्रुटि प्राप्त: enum वर्ग truth_enum में my_true एक प्रकार

मेरा अनुमान नहीं एक मूल्य के एक प्रकार है कि my_true है नाम नहीं बताती। क्या कोई विकल्प है जो मैं अपने कार्यक्रमों में इस कार्यक्षमता को सक्षम करने के लिए कर सकता हूं?

आदर्श नहीं है, लेकिन मैं कुछ ऐसा कर सकता है:

enum class : const char { ... }; 
const char const_flag_false = truth_enum::my_false; 

हम्म ...

+0

यदि आप एनम कक्षा का उपयोग करते हैं, तो आप उपसर्ग लिखने से नहीं बच सकते हैं। verbosity एक समस्या नहीं है जब तक कि यह पठनीयता में बाधा डालता है। – yngccc

+0

'एनम क्लास' का एक गणक पूर्ण रूप से एक पूर्णांक में परिवर्तित नहीं होता है, इसलिए 'char a_flag = my_true;' वैसे भी गलत है। –

+0

मैंने – user3728501

उत्तर

1

enum परिभाषा से class निकालें। मुझे लगता है कि आप int पर अंतर्निहित रूपांतरण से नाराज हैं। कैसे के बारे में:

static constexpr truth_enum _true_ = truth_enum::my_true; 
static constexpr truth_enum _false_ = truth_enum::my_false; 

या बस

const truth_enum _true_ = truth_enum::my_true; 
const truth_enum _false_ = truth_enum::my_false; 
+0

से ऊपर एक रूपांतरण का उपयोग किया है ठीक है, मैं इसे एक सेकंड में देखूंगा, मुझे याद है कि मुझे अपना कोड ठीक करने की आवश्यकता है जबकि मुझे – user3728501

+0

स्थिर समकक्ष क्या करता है? दरअसल, समकक्ष क्या करता है? – user3728501

+0

'constepxr'applied करने के लिए एक चर बनाता है यह' const' और संकलक संकलन समय पर अपने प्रारंभकर्ता गणना करने के लिए बाध्य करती है। इस विशिष्ट मामले में, यह मूल रूप से 'const' के समान है - मैं शायद उन जगहों पर चमकदार नए निर्माण का उपयोग कर रहा हूं जहां यह काम करता है लेकिन वास्तव में आवश्यक नहीं है। – Casey

0

समाधान आसान था, गलती मैंने बनाया enum के बजाय enum class उपयोग करने के लिए किया गया था।

हाँ, तो अभी भी एक सा उलझन में वास्तव में - मैं अब जैसे मूल्यों का उपयोग कर सकते हैं:

bool aboolean = (bool)my_true; 

इसके बजाय यह करने के लिए होने की:

bool aboolean = (bool)truth_enum::my_true; 

ऐसा क्यों है? (एक समुदाय विकी बनाया, ताकि लोग संपादित कर सकें ...)

+0

सी ++ में एम्स सी से विरासत में है, जहां यह सिर्फ एक प्रीप्रोसेसर मैक्रो है। इस प्रकार, यह वैश्विक नामस्थान में दिखाई देता है। –