我有一个带有签名
的函数func1
int func1(struct a *a1, int b1, const enum c c1);
我想使用带有签名
的另一个预定义函数来调用此函数void callerfunc(void (*func)(void *params), void *params);
请注意,我无法修改上述两个功能。
为此,我考虑制作params
指向的新结构,然后可以使用包装函数调用func1
,即
struct param_holder {
struct a a1;
int b1;
enum c c1;
};
int wrapper_func1(void* params) { // params points to initialized struct
return func1(params->a1, params->b1, params->c1);
}
我想知道是否有不同或更好的方法来实现这一点,可能没有创建包装函数。谢谢!
答案 0 :(得分:2)
使用包装器对我来说是一个很好的解决方案。在使用void指针之前强制转换:
int wrapper_func1(void* void_params) { // params points to initialized struct
struct param_holder *params = (struct param_holder *) void_params;
return func1(params->a1, params->b1, params->c1);
}