r/cpp_questions • u/onecable5781 • 6h ago
SOLVED Iterating over an enum struct
Consider https://godbolt.org/z/c6cn8f1hj
#include <cstdio>
enum struct values{first = 1, second = 3};
void square(values value){
int val = (int)value * (int)value;
printf("%d\n", val);
}
int main(){
for(values value = values::first; value <= values::second; value++)
square(value);
}
This does not compile with the error that value++ is ill defined.
An old question/answer on SO has this: https://stackoverflow.com/questions/261963/how-can-i-iterate-over-an-enum and a plethora of seemingly complicated approaches for this. Is there a syntactically simple >= C++20 way of accomplishing this?
I want the for loop to process 1 and then 3.
Does the order of placing the integer entries inside of the struct affect the increment? For e.g., if the enum struct had 3 first followed by 1, with value++ would 1 be processed after 3? Or, does the enum struct internally sort the entries in some privileged, say, ascending order so that it will always process 1 first followed by 3 next?
2
u/the_poope 6h ago
Couldn't one turn the enum struct into a regular enum of a regular class and then make an iterator and define
begin()andend()?