将函数指针作为函数参数传递的目的

时间:2019-11-12 03:11:59

标签: c++ parameters function-pointers

我理解为了将函数作为参数传递,我们需要使其成为函数指针。但是为什么我们需要在另一个函数定义中调用函数指针的同时又将函数指针作为另一个函数的参数传递呢?

//Why this
int (*f1)(int);
int testFunction(int (*f)(int));

//Instead of this
int f1(int);
int testFunction()
{
     int f1Value = f1(2); //call the fucntion and store the value
}

该示例可能没有任何意义。

当我们赞成传递函数指针而不是仅仅调用函数时吗?

3 个答案:

答案 0 :(得分:2)

  

当我们赞成传递函数指针而不是仅仅调用函数时吗?

当我们想要多态性时。

在直接调用的情况下,它总是与被调用的函数相同(假设包装函数不执行任何其他操作,这似乎是多余的。)

对于函数指针,可以通过分配指针来为testFunction的任何调用调用不同的函数。

请注意,函数指针不是实现多态的唯一方法。其他包括函数对象(用于静态多态)和虚函数(用于OOP样式结构化的运行时多态)。

答案 1 :(得分:1)

这是在C ++中需要发送函数指针作为参数的特殊时间,您可以看到sort函数使用另一个函数来比较元素。
或在某些用于函数回调的低级API中,例如libusb中的this之类的东西,当工作从后台事件中断时调用该函数。

答案 2 :(得分:1)

减少重复代码。

例如,当您要在python中编写“地图”函数时。它遍历元组中的所有元素,然后将该函数应用于该元素。

此方法在C语言中非常流行,因为它缺少OOP。在C ++中,我认为使用OOP可以达到相同的效果,但是在某些情况下,它更具可读性。

相关问题