У меня есть структура, определенная следующим образом:
struct GameState {
int score;
int moves;
bool won;
void *metadata;
};
typedef struct GameState GameState;
Указатель метаданных будет указывать на другую структуру типа, определенного во время выполнения. Например, это может быть:
struct KlondikeMetadata{
bool draw3;
int drawcount;
};
typedef struct KlondikeMetadata KlondikeMetadata;
Или, может быть:
struct FreeCellMetadata{
int reserveCells;
};
typedef struct FreeCellMetadata FreeCellMetadata;
Реальная используемая структура метаданных зависит от игры, в которую играет пользователь. В 99% случаев это не проблема, потому что я знаю, в какую игру играет пользователь. Однако бывают случаи, когда я не знаю (и не могу) этого знать.
Мой вопрос: есть ли способ определить или указать правильный тип метаданных во время выполнения?
Например, если бы я мог добавить свойство в структуру GameState, указывающее, что значение метаданных имеет тип KlondikeMetadata, и использовать его для приведения метаданных к этому типу, я думаю, что я был бы золотым. Есть ли способ сделать это? Есть ли способ указать тип и привести переменную во время выполнения в C?
union
может быть лучше, чем использованиеvoid *
плюс приведения. Это требует такой же бухгалтерии, конечно. - person FatalError   schedule 19.03.2013