Из Википедии:
В языках программирования и теории типов полиморфизм (от греческого πολύς, polys, «многие, много» и μορφή, morphē, «форма, форма») представляет собой единый интерфейс для объектов разных типов.
Так что я бы сказал, что единственный способ реализовать это в C - это использовать переменные аргументы вместе с некоторым (полу) автоматическим управлением информацией о типах.
Например, в C ++ вы можете написать (простите за мелочь):
void add( int& result, int a1, int a2 );
void add( float& result, float a1, float a2 );
void add( double& result, double a1, double a2 );
В C, среди других решений, лучшее, что вы можете сделать, это что-то вроде этого:
int int_add( int a1, int a2 );
float float_add( float a1, fload a2 );
double double_add( double a1, double a2 );
void add( int typeinfo, void* result, ... );
Тогда вам нужно:
- для реализации "typeinfo" с перечислениями / макросами
- для реализации последней функции с помощью stdarg.h stuff
- прощаться с статической проверкой типа C
Я почти уверен, что любая другая реализация полиморфизма должна выглядеть так же, как эта.
Вместо этого приведенные выше ответы, кажется, пытаются адресовать наследование больше, чем полиморфизм!