我正在为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)- 但我不喜欢这种方法,对我来说似乎是冗余,而且API令人困惑.
使用联盟:
typedef union {
int i;
double d;
char c;
...
} any_type;
Run Code Online (Sandbox Code Playgroud)
但是这样我强迫用户既知道了any_typeunion,又在调用之前创建它find.我想避免这种情况.
使用可变函数:int find(void* list, ...).我喜欢这种方法.但是,我担心没有对参数数量的限制.用户可以自由写,int x = find(list, 1, 2.0, 'c')虽然我不知道它应该是什么意思.
我也看到了这个问题的答案:C:为一个函数参数发送不同的结构,但它无关紧要,因为我想接受非指针参数.
处理此功能的正确方法是什么?