如何编写接受未定义参数的函数? 我想它可以这样工作:
void foo(void undefined_param)
{
if(typeof(undefined_param) == int) {/...do something}
else if(typeof(undefined_param) == long) {/...do something else}
}
我已经读过模板可以解决我的问题,但是在C ++中我需要用C语言。
我只是试图避免使用许多类似的代码编写两个函数。就我而言,我不会寻找int
或long
,而是寻找我定义的结构类型。
答案 0 :(得分:0)
由于代码避免使用具有大量相似代码的两个函数,因此为2个包装函数编写一个大的辅助函数(每个结构类型都有1个函数)。
struct type1 {
int i;
};
struct type2 {
long l;
};
static int foo_void(void *data, int type) {
printf("%d\n", type);
// lots of code
}
int foo_struct1(struct type1 *data) {
return foo_void(data, 1);
}
int foo_struct2(struct type2 *data) {
return foo_void(data, 2);
}
使用C11,使用_Generic
,代码可以帮助您:Example或@Brian评论
实施例
int foo_default(void *data) {
return foo_void(data, 0);
}
#define foo(x) _Generic((x), \
struct type1*: foo_struct1, \
struct type2*: foo_struct2, \
default: foo_default \
)(x)
void test(void) {
struct type1 v1;
struct type2 v2;
foo(&v1); // prints 1
foo(&v2); // prints 2
}