makro: enum + tablica stringów

0

Jak w C (C99 jeśli to coś pomoże) stworzyć makro, pozwalające na stworzenie za jednym zamachem tablicy c-stringów

const char* ItemArray[] = {"item1","item2","item3"};

oraz enuma z elementami o tych samych nazwach (albo podobnych, np. z prefiksem):

enum TItem {
   item1,
   item2,
   item3
};

tak, aby tablicę można było indeksować tym enumem:

ItemArray[item1] // == "item1"

oczywiście mogę to zrobić bez makra - ale muszę wszystko pisać dwa razy i pilnować kolejności, co się kiedyś zemści. A może ktoś zaproponuje inny sposób na stworzenie mapowania identyfikator:string?

0

Ja widzę tylko jeden nienajlepszy sposób.

#define MetaEnum5(name, en1, en2, en3, en4, en5) \
emum name { en1, en2, en3, en4, en5 };\
const char * const name##Names[5] = { #en1, #en2, #en3, #en4, #en5}

Całe nieszczęście polega na tym, że z góry musisz podać liczbę enumów i stworzyć takie makro dla każdej potrzebnej liczby.
Chyba, że nie przeszkadza ci tworzenie niepotrzebnych symboli:

MetaEnum5(Testowy, Bialy, Zielony, Czerwony, _dumy1, _dumy2);
1

Sprawdziłem ale mało dokładnie bo się mocno śpieszę - wygląda że działa:

#define MetaEnum(name, ...) \
enum name { __VA_ARGS__ };\
const char * const name##Names[5] = { __VA_ARGS__}

PS. Z tego co pamiętam, jest to w standardzie C99 ale nie C++

0

PS. Z tego co pamiętam, jest to w standardzie C99 ale nie C++
dzięki. zdaje się że w C++0x to też będzie. ale to bez znaczenia, bo ten program jest w C99.

1 użytkowników online, w tym zalogowanych: 0, gości: 1