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 つの関数引数に対して異なる構造を送信しますが、非ポインター引数を受け入れたいため、無関係です。
この関数を処理する適切な方法は何ですか?