我正在为 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;
但是通过这种方式,我强制用户既要了解
any_type
联合,又要在调用find
. 我想避免这种情况。使用可变参数函数:
int find(void* list, ...)
. 我喜欢这种方法。但是,我担心参数数量没有限制。用户可以自由写作,int x = find(list, 1, 2.0, 'c')
虽然我不知道它应该是什么意思。
我也看到了对这个问题的回答:C:为一个函数参数发送不同的结构,但这无关紧要,因为我想接受非指针参数。
处理此功能的正确方法是什么?