C でリスト用の単純なライブラリを実装していますが、find
関数の記述に問題があります。
私の関数は、検索する任意のタイプの引数を
受け入れたいと思います:find(my_list, 3)
とfind(my_list, my_int_var_to_find)
.
私はすでにリストの要素のタイプに関する情報を持っています。
今のところ、これに対処する方法がいくつか見つかりました。
さまざまなタイプのサフィックスを持つさまざまな関数:
int findi(void* list, int i)
,int findd(void* list, double d)
- しかし、私はこのアプローチが好きではありません.ユニオンを使用:
typedef union { int i; double d; char c; ... } any_type;
any_type
しかし、この方法では、ユーザーにユニオンについて知ってもらい、find
. それは避けたいと思います。可変引数関数を使用:
int find(void* list, ...)
. 私はこのアプローチが好きです。ただ、引数の数に制限がないのが気になります。ユーザーは自由に書くことint x = find(list, 1, 2.0, 'c')
ができますが、それが何を意味するのかはわかりません。
この質問への回答も見ました: C : 1 つの関数引数に対して異なる構造を送信しますが、非ポインター引数を受け入れたいため、無関係です。
この関数を処理する適切な方法は何ですか?