C Type de données de modèle de programmation

J'ai deux fonctions dans C qui font exactement la même chose, la seule différence étant les types de données passés à chaque fonction, par exemple. l'un est dans l'autre char *. Existe-t-il un moyen de combiner ces fonctions à une seule de sorte que, lorsque j'appelle cette fonction, je n'ai pas à m'inquiéter du type de données. Cela peut être fait en C ++ à l'aide d'un modèle, mais je souhaite faire la même chose dans C et je ne sais pas comment, merci.

2
Que faites-vous qui est exactement la même chose pour les chaînes et les entiers?
ajouté l'auteur Seth Carnegie, source
Montrez-nous le code peut-être?
ajouté l'auteur Bart, source

2 Réponses

I know two common ways to deal with such situtation in C.
1)Replace int and "char *", with "void *p" and "int size"

void f1(int i); void f2(char *str); -> void f(void *p, int s);
f(&i, sizeof(i)); f(str, strlen(str);//or may be f(str, sizeof(str[0]);

par exemple, consultez qsort de stdlib

2) Utilisez préprocesseur, comme

#define f(arg) do { \
   //magic
} while (0)

des choses comme celle-là avaient l'habitude d'émuler std :: list dans le noyau linux.

1
ajouté
Merci cela ferait
ajouté l'auteur Code Gre, source

If they are "doing exactly the same thing", then perhaps in one of them you are converting the parameter into the OTHER type (char* ==> int or int ==> char*). If so, you could do just the conversion and then call the other function. That way you'd only have one copy of the majority of it.

Il n’ya vraiment aucun moyen d’élaborer un comportement "modèle" élégant. Essayer de le faire ne fera que faire de votre code un MESS incompréhensible.

0
ajouté