【发布时间】:2019-03-19 21:32:44
【问题描述】:
之前我问过如何用C语言制作一个接收函数作为参数的函数。我得到了答案Link to the question,但这个解决方案是基于参数函数的参数。我的意思是:
int functionToPassAsParameter (int arg1, int arg2){
// do something
}
int functionWhichReceiveFunction (int (*f)(), int arg1, int arg2){
// do something
f(arg1, arg2);
// do something
}
// How to call the function
functionWhichReceiveFunction (&functionToPassAsParameter, 1, 2);
我想要类似的东西:
int functionToPassAsParameter (int arg1, int arg2){
// do something
}
int functionWhichReceiveFunction ( f() ){
// do something
f();
// do something
}
// How to call the function
functionWhichReceiveFunction ( functionToPassAsParameter(arg1, arg2) );
所以,当我调用函数时,我传递了正确的参数,但是当我定义接收另一个函数的函数时,我没有指定要发送给它的参数。有可能吗?
编辑 1: 我想实现将任何功能传递给
functionWhichReceiveFunction。就像是:
int function_a (int param1, int param2) { /* Do something */ };
void function_b (char *arg1) { /* Do something */ };
// Call the function with two differents functions regardless return type nor params
int x = functionWhichReceiveFunction ( function_a(param1, param2) );
functionWhichReceiveFunction ( function_b(arg1) );
【问题讨论】:
-
你想用你建议的方法解决什么问题,第一种方法还没有解决?
-
第一种方法需要定义要发送的参数。第二种方法不接收任何参数,所以它是 dinamyc,我可以使用它发送任何函数。在第一种方法中,只能始终发送相同的功能
-
函数指针呢?
-
在这种情况下你会如何调用函数?听起来您几乎是在尝试重新创建多态性。
-
如果你不知道函数的签名,你将如何调用它?您可以使用不透明指针作为参数并使用不透明指针作为
void func(void*(*f)(void *), void *arg) { f(arg) }进行调用,但在某些地方需要处理不透明指针并且需要知道底层类型,以便您可以使用它来做一些有用的事情。软件工程的主要问题在哪里。
标签: c function parameters