Нет, вы не можете этого сделать. Если вы использовали C ++, вы могли бы использовать шаблоны для достижения этой цели. Но в C. не существует механизма "type enum".
Вы могли бы рассмотреть союз:
typedef enum {
type1, type2
} type_t;
typedef struct {
type_t typecode;
union {
type1_t type1value;
type2_t type2value;
};
char* something;
} midas;
Это приведет к тому, что midas.type1value
и midas.type2value
займут одно и то же пространство памяти. Объем памяти, занятой для объединения, будет равен объему памяти, необходимому для хранения самого большого типа данных, который он содержит.
Затем вам нужно будет взглянуть на midas.typecode
и подумать, какого члена профсоюза использовать. Если вы используете неправильный файл, вы получите неверные данные, что может привести к сбою программы, поэтому будьте осторожны.