Если ваши перечисленные значения достаточно плотные, вы можете определить массив для хранения строк и просто найти их (используйте NULL для любого пропущенного значения и добавьте специальный обработчик в своей процедуре поиска).
char *DogList[] = {
"vizsla", /* element 0 */
NULL,
NULL,
NULL,
"terrier", /* element 3 */
...
};
Это неэффективно для разреженных перечислений.
Даже если перечисление не плотное, вы можете использовать массив структур для хранения отображения.
typedef struct DogMaps {
DogType index;
char * name;
} DogMapt;
DogMapt DogMap[] = {
{kVizsla, "vizsla"},
{kTerrier, "terrier"},
{kYellowLab, "yellow lab"},
NULL
};
Второй подход очень гибкий, но он подразумевает поиск по карте каждый раз, когда вам нужно использовать данные. Для больших наборов данных рассмотрите b-дерево или хеш вместо массива.
Любой метод может быть обобщен для подключения большего количества данных. В первом используйте массив структур, во втором просто добавьте больше членов в структуру.
Конечно, вы захотите написать различные обработчики, чтобы упростить ваше взаимодействие с этими структурами данных.
@ Hershi Во что бы то ни стало, отдельный код и данные. Приведенные выше примеры предназначены для ясности, а не функциональности.
Я смущаюсь, признав, что для этой цели я по-прежнему использую плоские файлы, разделенные пробелами, а не тот структурированный ввод, который вы демонстрируете, но мой производственный код будет считывать как можно больше данных из внешних источников.
Подождите, я вижу, что вы имеете в виду генерацию кода.
Конечно. В этом нет ничего плохого.
Я подозреваю, что ОП интересовало, как должен выглядеть сгенерированный код ...