Проблема, с которой я сталкиваюсь в C, заключается в том, что я хотел бы иметь ряд структур, в которых есть базовый элемент из другой структуры. например
struct foo {
int a;
void (*calculate)(struct foo *);
};
struct bar {
int a;
void (*calculate)(struct foo *);
double b;
};
void do_thing(struct foo *a)
{
a->calculate(a);
}
Проблема, с которой я столкнулся, заключается в том, что следующее нарушает строгие правила псевдонимов.
void foo_calculate(struct foo *a)
{
struct bar *b = (struct bar*)a;
}
Единственный способ, который я придумал для этого, — создать объединение внутри struct foo
, содержащее все наследуемые от него структуры. Есть ли более простой способ сделать это?