【问题标题】:Purpose of passing function pointer as function arguments [duplicate]将函数指针作为函数参数传递的目的[重复]
【发布时间】:2020-03-07 17:40:59
【问题描述】:

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

//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
}

这个例子可能没有任何意义。

什么时候我们倾向于传递函数指针而不是仅仅调用函数?

【问题讨论】:

  • 您是否考虑过可以从其他地方为参数传递完全不同的指针的可能性?
  • @SamVarshavchik 我想我没有,我不确定你的意思。对不起

标签: c++ parameters function-pointers


【解决方案1】:

什么时候我们倾向于传递函数指针而不是仅仅调用函数?

当我们想要多态时。

在直接调用的情况下,被调用的总是同一个函数(考虑到包装函数什么都不做,它似乎是相当多余的。)

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

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

【讨论】:

    【解决方案2】:

    在 C++ 中需要发送函数指针作为参数的特殊时期,您可以看到 sort 函数采用另一个函数来比较元素。
    或者在某些低级 API 函数指针中用于函数回调,例如 libusb 中的 this,它在后台事件中的工作停止时调用该函数。

    【讨论】:

      【解决方案3】:

      减少重复代码。

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

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

      【讨论】:

      • 你的意思是为了节目的性能?
      • 我是这么认为的,也是为了可读性。
      猜你喜欢
      • 2013-03-16
      • 1970-01-01
      • 2020-11-08
      • 2019-08-17
      • 2017-01-08
      • 1970-01-01
      • 1970-01-01
      • 2021-12-18
      • 2010-11-19
      相关资源
      最近更新 更多