2011-11-12 13 views
2

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

+3

文字列と整数の両方で、まったく同じことをやっていますか? –

+3

おそらくコードを教えてください? – Bart

答えて

1

は、私が "void *型のP" と "int型のサイズ" は、例えば

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

とC.
1)int型と "char型*" を置き換え、そのようなsitutationに対処するための2つの一般的な方法を、知っていますこのような

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

の事のように、STDLIB

2)を使用するプリプロセッサからqsortを見るには、LINでのstd ::リストをエミュレートするために使用しましたuxカーネル。

+0

ありがとうございます –

0

彼らは、おそらくそれらのいずれかで、あなたが他のタイプ(char* ==> intまたはint ==> char*)にパラメータを変換している、「はまったく同じことをやって」している場合。そうであれば、変換だけを行い、他の関数を呼び出すことができます。そうすれば、その大半のコピーを1つしか持てません。

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