C Programmadata-gegevenstabel

Ik heb 2 functies in C die precies hetzelfde doen, het enige verschil is de gegevenstypes die aan elke functie worden doorgegeven, bijvoorbeeld de ene is in de andere char *. Is er een manier om deze functies te combineren tot één, zodat ik me geen zorgen hoef te maken over het gegevenstype als ik deze functie aanroep. Dit kan worden gedaan in C ++ met behulp van een sjabloon, maar ik wil hetzelfde doen in C en ik weet niet hoe, thx.

2
Wat doe je precies dat hetzelfde is voor beide strings en gehele getallen?
toegevoegd de auteur Seth Carnegie, de bron
Toon ons de code misschien?
toegevoegd de auteur Bart, de bron

2 antwoord

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]);

zie bijvoorbeeld qsort van stdlib

2) Gebruik preprocessor, zoals

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

dingen als deze werden gebruikt om std :: list in linux kernel te emuleren.

1
toegevoegd
Bedankt dat zou doen
toegevoegd de auteur Code Gre, de bron

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.

Er is echt geen manier om dergelijk gedrag elegant te modelleren. Als je dit probeert, wordt je code alleen een onbegrijpelijke MESS.

0
toegevoegd