Sto provando a implementare std::is_enum
. Ecco il mio codice finora:implementazione isumen
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;
Questo codice causa un errore. Più precisamente:
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’
Qualcuno può spiegarmi dove faccio un errore? È colpa mia o del compilatore? Grazie in anticipo.
Modifica: se è completamente sbagliato, quindi come posso correggerlo?
Nota: sto usando g++ -o <file> <file>.cpp
Sono abbastanza sicuro che 'is_enum', come molti altri tratti di tipo, non può essere implementato senza intrinseco del compilatore. – ildjarn
[OT] In questo caso, un'alternativa migliore alle variabili statiche può essere _enums_ (come: 'enum {value = false};') – Gigi
@Gigi: Questo è taggato 'C++ 11' - l'alternativa _best_ è quella eredita da 'std :: true_type',' std :: false_type', o 'std :: integral_constant <>'. : -] – ildjarn