C:如何将函数(不知道其参数)传递给另一个函数?

前端之家收集整理的这篇文章主要介绍了C:如何将函数(不知道其参数)传递给另一个函数?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试创建一个函数,它将存储和重复给定为特定时间或重复给定值的参数的另一个函数.
但是当你想传递一个函数作为参数时,你必须先掌握所有的参数.
如果我想将函数作为一个参数传递给函数,而另一个参数又如何呢?
void AddTimer(float time,int repeats,void (*func),params); // I know params has no type and that (*func) is missing parameters but it is just to show you what I mean

提前致谢

解决方法

就现代C而言,dribeas的答案是正确的.

为了感兴趣,C世界还有一个简单的低科技解决方案,尽管如此,它在C工作.而不是允许任意参数,将函数定义为void(* func)(void *),并使“params”为void *.调用者的工作就是定义一些包含参数的结构体,并管理其生命周期.通常调用者也将为真正需要调用函数编写一个简单的包装器:

void myfunc(int,float); // defined elsewhere

typedef struct {
    int foo;
    float bar;
} myfunc_params;

void myfunc_wrapper(void *p) {
    myfunc_params *params = (myfunc_params *)p;
    myfunc(params->foo,params->bar);
}

int main() {
    myfunc_params x = {1,2};
    AddTimer(23,5,myfunc_wrapper,&x);
    sleep(23*5 + 1);
}

实际上你想要“点火和忘记”计时器,所以如果你使用这个方案,你可能还需要一种方法,一旦所有的启动完成,定时器就可以释放用户数据指针.

显然这种类型安全性有限.原则上应该不重要,因为提供函数指针和用户数据指针的人不应该有很大的困难,确保它们匹配.实际上,当然人们会发现编写错误方法,以及如何责怪你,因为他们的编译器没有告诉他们有关错误;-)

原文链接:https://www.f2er.com/c/113300.html

猜你在找的C&C++相关文章