Cプログラミングテンプレートのデータ型

私は全く同じことを行う C の2つの関数を持っていますが、唯一の違いは各関数に渡されるデータ型です。 1つは他のchar * intです。 これらの関数を1つに結合する方法があるので、この1つの関数を呼び出すときにデータ型について心配する必要はありません。これはC + +でテンプレートを使用して行うことができますが、私は C で同じことをやりたい、どのように、thxを知らない。

2
文字列と整数の両方でまったく同じことをやっていますか?
追加された 著者 Seth Carnegie,
おそらく私たちにコードを教えてください?
追加された 著者 Bart,

2 答え

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

たとえば、stdlibの qsort を参照してください。

2)のようなプリプロセッサを使う

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

このようなものは、linuxカーネルのstd :: listをエミュレートするために使われました。

1
追加された
ありがとうございました
追加された 著者 Code Gre,

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.

そのような行動をエレガントに「テンプレート化」する方法は本当にありません。そうしようとすると、あなたのコードは理解不能なMESSにしかならないでしょう。

0
追加された