C++ 传递函数指针作为函数参数的目的

C++ 传递函数指针作为函数参数的目的,c++,parameters,function-pointers,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

我理解,为了将函数作为参数传递,我们需要将其设置为函数指针。但是为什么我们需要在另一个函数中作为参数传递函数指针,而我们可以在另一个函数定义中调用该函数呢

//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
}
这个例子可能毫无意义

当我们喜欢传递函数指针而不是仅仅调用函数时

当我们喜欢传递函数指针而不是仅仅调用函数时

当我们需要多态性时

在直接调用的情况下,它总是被调用的同一个函数,如果包装器函数不做其他事情,那么它看起来是相当冗余的

在函数指针的情况下,可以通过分配指针为testFunction的任何调用调用调用不同的函数

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

当我们喜欢传递函数指针而不是仅仅调用函数时

当我们需要多态性时

在直接调用的情况下,它总是被调用的同一个函数,如果包装器函数不做其他事情,那么它看起来是相当冗余的

在函数指针的情况下,可以通过分配指针为testFunction的任何调用调用调用不同的函数


请注意,函数指针不是实现多态性的唯一方法。另一些包括面向OOP风格结构运行时多态性的静态多态性函数和虚拟函数。

是一个特殊的时间,需要在C++中发送函数指针作为参数,您可以看到函数,用于比较元素的另一个功能。


或者在一些低级API函数指针中使用函数调用,比如在LIBUBB中,当工作从背景事件中下来时调用函数。

< P>是在C++中需要发送函数指针作为参数的特殊时间,您可以看到另一个用于比较元素的函数。
或者在一些低级API中,函数指针用于函数回调,例如在libusb中,当后台事件停止工作时调用函数。

以减少重复代码

例如,当您想用python编写map函数时。它迭代元组中的所有元素,然后将函数应用于该元素


这种方法在C语言中非常流行,因为它缺乏OOP。在C++中,我认为我们可以用OOP实现相同的效果,但是在某些情况下,它更可读。< /P> < P>减少重复代码。 例如,当您想用python编写map函数时。它迭代元组中的所有元素,然后将函数应用于该元素


这种方法在C语言中非常流行,因为它缺乏OOP。在C++中,我认为我们可以用OOP实现同样的效果,但是在某些情况下,它更可读。

你是否考虑过可以从一个参数传递一个完全不同的指针,从另一个地方得到?对不起,您是否考虑过可以从其他地方为参数传递完全不同的指针?@SamVarshavchik我想我没有,我不知道您的意思。对不起,你是说这是为了程序的性能?我想是的,也是为了可读性。你是说这是为了程序的性能?我想是的,也是为了可读性。