Поля в структурах могут быть указателями на функции:
struct Interface {
int (*eval)(int i);
};
Вы не можете определять функции в теле структуры, но вы можете назначать функции с одинаковой сигнатурой для полей структуры:
int my_sqr(int i) {
return i * i;
}
int my_cube(int i) {
return i * i * i;
}
struct Interface squarer = { my_sqr };
struct Interface cuber = { my_cube };
Затем вызовите поля как обычную функцию:
printf("%d\n", squarer.eval(4)); // "16"
printf("%d\n", cuber.eval(4)); // "64"