मैं std::is_enum
को लागू करने की कोशिश कर रहा हूं। यहां मेरा कोड अब तक है:is_enum कार्यान्वयन
template<typename T>
struct is_enum {
static bool value;
};
template<typename T>
bool is_enum<T>::value = false;
template<enum E>
struct is_enum {
static bool value;
};
template<enum E>
bool is_enum<E>::value = true;
यह कोड त्रुटि का कारण बनता है। अधिक सटीक:
g++ -std=c++0x -Wall -o "enum2" "enum2.cpp" (in directory: /home/aristophanes/Desktop/C++)
Compilation failed.
enum2.cpp:11:15: error: use of enum ‘E’ without previous declaration
enum2.cpp:3:10: error: template parameter ‘class T’
enum2.cpp:12:8: error: redeclared here as ‘int E’
enum2.cpp:16:15: error: use of enum ‘E’ without previous declaration
enum2.cpp:17:14: error: ‘E’ was not declared in this scope
enum2.cpp:17:15: error: template argument 1 is invalid
enum2.cpp:17:18: error: template declaration of ‘bool value’
क्या कोई मुझे बता सकता है कि मैं गलती करता हूं? यह मेरा या संकलक की गलती है? अग्रिम में धन्यवाद।
संपादित करें: यदि यह पूरी तरह गलत है, तो मैं इसे कैसे ठीक कर सकता हूं?
नोट: मैं g++ -o <file> <file>.cpp
मैं काफी हद तक निश्चित हूं कि 'is_enum', कई अन्य प्रकार के गुणों की तरह, संकलक इंट्रिनिक्स के बिना लागू नहीं किया जा सकता है। – ildjarn
[ओटी] इस मामले में, स्थैतिक चर के लिए एक बेहतर विकल्प _enums_ हो सकता है (जैसे: 'enum {value = false};') – Gigi
@Gigi: इसे टैग किया गया है 'C++ 11' - _best_ विकल्प है 'std :: true_type',' std :: false_type', या 'std :: integral_constant <>' से प्राप्त होता है। : -] – ildjarn