nie jestem pewien, że pytanie nawet sens. To jest na jakimkolwiek poziomie stopy fundamentalnie niemożliwe. Rozważmy:
enum Animal
{
cat = 0,
dog = 5,
dolphin = 8,
canine = 5,
bear = 20
};
Gdy wartość bazową jest 5
, nie masz możliwości określania czy został ustawiony przez dog
lub przez canine
, i tak nie sposób wiedząc, czy następna wartość powinna być dolphin
lub bear
. Można umieścić wartości w tablicy i powtórzyć nad tym, ale Nie widzę innego rozwiązania.
W ogóle, oczywiście, większość czasu będziesz się wyraźnie wartości wpływające tak to jesteś definiowanie maskę bitową (np jak std::ios_base::fmtflags
), w tym przypadku, to nie ma sensu do iteracji . Inne przypadki, o których mogę pomyśleć, to: specjalne wartości sentencji (np. Coś podobnego do unset
), które prawdopodobnie chcesz pominąć podczas iteracji lub synonimów (np. Mój przykład dog
/canine
), w takim przypadku, " d prawdopodobnie tylko chcesz odwiedzić jeden z synonimów i realistycznie, to bym napisać coś takiego:
enum Animal
{
cat,
dog,
canine = dog,
dolphin,
bear
};
i zwykłe sztuczki iteracji spowodowałoby właśnie chcesz.
Nie w "enum" bezpośrednio. Jednak możesz ręcznie umieścić wszystkie elementy 'enum' w kontenerze (' vector', 'set',' unordered_set', cokolwiek ...), a następnie iterować po tym kontenerze. – syam
Masz na myśli, że chcesz czegoś takiego jak 'dla (Animal a = Cat; a! = Dolphin; a ++)'? Chociaż działa to przy pierwszym wyliczaniu, nie jest to coś, co osobiście poleciłbym, ponieważ może być trudne do odczytania i zrozumienia. –
Możesz znaleźć odpowiedź w tym wątku http: // stackoverflow.com/questions/261963/how-can-i-iterate-over-an-enum. – blitz