История изменений
Исправление BreadFan, (текущая версия) :
void* - плохо. плюс, даже если мы все правильно кастанули, все равно приходим к исходной задаче.
представь развесистую иерархию типов с несколькими уровнями наследования. на каждом уровне надо валидировать конкретный сет полей. сишный код превратится череду switch, в которых, если не генерировать код, как предлагает анонимус, очень легко наделать ошибок. плюс без статик ассертов (они есть в С?) ты в этом коде не узнаешь, что добавился новый тип в иерархии или где-то опять про него забудешь.
Исходная версия BreadFan, :
void* - плохо. плюс, даже если мы все правильно кастанули, все равно приходим к исходной задаче.
представь развесистую иерархию типов с несколькими уровнями наследования. на каждом уровне надо валидировать конкретный сет полей. сишный код превратится череду switch, в которых, если не генерировать код, как предлагает анонимус, очень легко наделать ошибок. плюс без статик ассертов (они есть в С?) ты в этом коде не узнаешь, что добавился новый тип в иерархии и где-то опять про него забудешь.