Вам необходимо выбрать тип указателя на функцию, который будет использоваться в качестве «универсального указателя на функцию», использовать этот тип для определения массива и использовать явное приведение типов.Приведение одного типа указателя на функцию к другому и затем обратно гарантирует сохранение значения.
Другими словами:
typedef int (*generic_fp)(void);
generic_fp func_table[2] = { (generic_fp)add, (generic_fp)mean };
Затем, чтобы вызвать add
, вам необходимо привести его обратновправо введите:
result = ((mathfunc2)func_table[0])(x, y);
Вы можете определить некоторые макросы, если посчитаете их более приемлемыми:
#define FUNC_2(f, p1, p2) ((mathfunc2)(f))(p1, p2)
#define FUNC_4(f, p1, p2, p3, p4) ((mathfunc4)(f))(p1, p2, p3, p4)
result = FUNC_2(func_table[0], x, y);