sto cercando di attivare un-enum ambito con il tipo unsigned int:Accensione enum ambito
L'enumerazione è definito come:
const enum struct EnumType : unsigned int { SOME = 1, MORE = 6, HERE = 8 };
ho ricevuto un const unsigned riferimento int e sono cercando di verificare quel valore rispetto ai valori enum.
void func(const unsigned int & num)
{
switch (num)
{
case EnumType::SOME:
....
break;
case EnumType::MORE:
....
break;
....
default:
....
}
}
Questo si traduce in un errore di sintassi: Error: This constant expression has type "EnumType" instead of the required "unsigned int" type.
Ora, utilizzando un static_cast
su ogni interruttore, come ad esempio:
case static_cast<unsigned int>(EnumType::SOME):
....
break;
case static_cast<unsigned int>(EnumType::MORE):
....
break;
correzioni l'errore di sintassi, anche se la fusione ad ogni istruzione case doesn sembra un buon modo per farlo. Ho davvero bisogno di lanciare in ogni caso, o c'è un modo migliore?
A mio parere, il punto principale delle enumerazioni fortemente tipizzate è che sono ... beh, fortemente tipizzate, quindi nessuna conversione implicita. Quindi sì, devi cast. EDIT: Vedo ora che non stavi chiedendo se è necessario eseguire il cast, ma se è necessario eseguire il cast per ogni caso. Scusa colpa mia. – antred