Работа с различными типами данных в си?
Можно старый добрый способ: структура, в которой два поля: enum и union. В зависимости от значения перечисления можно по разному читать union.
Ну или void*, вместо union. Или свою реализацию vtable.
тут, имхо, только один вариант. void*