Il est possible de faire certains types de types génériques-fonctions comme les macros dans C, pour les choses exemple comme:Programmation de type générique avec des macros: astuces pour déterminer le type?
#define SQRT(x) (sizeof(x) == sizeof(float) ? sqrtf((x)) : \
sizeof(x) == sizeof(double) ? sqrt((x)) : \
sqrtl((x)))
Cela fonctionne (la plupart du temps) comme prévu aussi longtemps que x
est un type à virgule flottante. Et si je veux une macro générique de type qui peut prendre un type entier ou un type de pointeur, qui peut avoir la même taille. Existe-t-il un moyen intelligent de tester si l'argument macro est un entier ou un pointeur? Qu'en est-il d'un entier par rapport à un type à virgule flottante?
Les macros ne sont pas intrinsèquement connues, mais il y a parfois des astuces. Par exemple, '((0 * (x) -1) <0)' peut déterminer si 'x' est signé ou non (étant donné que' x' a un rang de conversion de 'int' ou plus). –