Ich versuche std::is_enum
zu implementieren. Hier ist mein Code so weit:is_enum Implementierung
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;
Dieser Code verursacht einen Fehler. Genauer gesagt:
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’
Kann mir jemand erklären, wo ich einen Fehler mache? Es ist mein oder der Compiler ist schuld? Danke im Voraus.
Edit: Wenn es komplett falsch ist, dann wie kann ich es korrigieren?
Hinweis: Ich verwende g++ -o <file> <file>.cpp
Ich bin ziemlich sicher, dass 'is_enum', wie viele andere Typenmerkmale, nicht ohne Compiler intrinsics implementiert werden kann. – ildjarn
[OT] In diesem Fall, kann eine bessere Alternative zu statischen Variablen sein _enums_ (wie: 'enum {value = false};') – Gigi
@Gigi: Dies ist markiert 'C++ 11' - die _best_ Alternative ist zu erben von 'std :: true_type',' std :: false_type' oder 'std :: integral_constant <>'. : -] – ildjarn