使用void *参数调用预定义函数

时间:2016-02-02 09:51:52

标签: c function parameter-passing

我有一个带有签名

的函数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);
}

我想知道是否有不同或更好的方法来实现这一点,可能没有创建包装函数。谢谢!

1 个答案:

答案 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);
}