Es posible hacer ciertos tipos de tipo genérico-funciones como macros en C, por ejemplo, cosas como:Programación de tipo genérico con macros: ¿trucos para determinar el tipo?
#define SQRT(x) (sizeof(x) == sizeof(float) ? sqrtf((x)) : \
sizeof(x) == sizeof(double) ? sqrt((x)) : \
sqrtl((x)))
esto funciona (en su mayoría) como se espera, siempre y cuando x
es un tipo de punto flotante.
Pero, ¿qué ocurre si quiero una macro genérica de tipo que puede tomar un tipo entero o un tipo de puntero, que puede tener el mismo tamaño. ¿Hay alguna manera inteligente de probar si el argumento macro es un entero o un puntero? ¿Qué pasa con un entero versus un tipo de punto flotante?
Las macros no son inherentemente conocidas, pero a veces hay trucos. Por ejemplo, '((0 * (x) -1) <0)' puede determinar si 'x' está firmado o no (dado que' x' tiene un rango de conversión de 'int' o superior). –