Non sono sicuro che la questione rende ancora senso. È a qualsiasi tariffa fondamentalmente impossibile. Considerate:
enum Animal
{
cat = 0,
dog = 5,
dolphin = 8,
canine = 5,
bear = 20
};
Quando il valore di fondo è 5
, non si ha modo di determinare se sia stata impostata dog
o canine
, e quindi non c'è modo di sapere se il valore successivo dovrebbe essere dolphin
o bear
. È possibile inserire i valori in un array e scorrere su di esso, ma Non vedo altre soluzioni.
In generale, naturalmente, la maggior parte del tempo si sta esplicitamente valori che interessano come questo questo, si sta definendo una maschera di bit (ad esempio come std::ios_base::fmtflags
), e in tal caso, non ha senso per iterare . Altri casi d'uso mi viene in mente sarebbe valori speciali Sentinal (ad esempio, qualcosa come unset
), che si sarebbe probabilmente desidera saltare quando l'iterazione, o sinonimi (come il mio dog
/canine
esempio di cui sopra), nel qual caso, è' d probabilmente vogliono solo visitare uno dei sinonimi, e realisticamente, ci si scrivere qualcosa di simile:
enum Animal
{
cat,
dog,
canine = dog,
dolphin,
bear
};
, ed i soliti trucchi di iterazione si tradurrebbe in esattamente quello che vuoi .
fonte
2013-07-22 10:58:35
Non sul 'enum' direttamente. Comunque puoi mettere manualmente tutti gli elementi di 'enum' in un contenitore (' vector', 'set',' unordered_set', qualunque cosa ...) e poi scorrere su quel contenitore. – syam
Vuoi dire qualcosa come 'per (Animale a = Gatto; a! = Dolphin; a ++)'? Mentre questo funziona per la prima enumerazione, non è qualcosa che raccomanderò personalmente, in quanto potrebbe essere difficile da leggere e capire. –
È possibile trovare la risposta in questo thread http: // StackOverflow.it/questions/261963/how-can-i-iterate-over-an-enum. – blitz