4 ms·
Honestly, all I ever want is to be enumerate a struct data member or an enum at compile time, and be able to get the name, type and value of each iterated membe
by NL807 2y ago
Honestly, all I ever want is to be enumerate a struct data member or an enum at compile time, and be able to get the name, type and value of each iterated member. That's it. That's all I want.
- Gibbon1 2y agoWould be happy with a enum that's a named key value. key_enum one_two_three { FIRST = { .name = "first"}, SECOND = { .name = "second"}, THIRD = { .name = "third"}, LAST = { .value = 255, .name = "last"}, };
- uecker 2y agoWhat is wrong with the following? Do you want type more type safety, e.g. linking the enumeration constants to the array? enum { FIRST, SECOND, THIRD }; struct { char *name; int value; } table[] = { [FIRST] = { .name = "FIRST", .value = 0 }, [SECOND] = { .name = "SECOND", .value = 1 }, [THIRD] = { .name = "THIRD", .value = 3 }, };
- gpderetta 2y agoYou still need generic code to link the enum type to its format string, for example for use in std::format or std::ostream. Nothing really difficult, normally all of this is done by hand, which is tedious and error prone, or incorporated in a macro. It would just be nice if there was a standard provided turn-key solution to the problem.
- jcelerier 2y agoI have yet to see a project where there have never been bugs due to someone forgetting to update the metadata attached with the enum when there's a change
- jjmarr 2y agomagic_enum addresses your issue but will absolutely kill compile time on a large project due to recursive template instantiation.