【问题标题】:Why are function objects better than function pointers?为什么函数对象比函数指针更好?
【发布时间】:2016-09-07 10:39:16
【问题描述】:

来自Wikipedia - Function object

函数对象的典型用途是编写回调函数。可以通过使用函数指针来执行过程语言(例如 C)中的回调。 [2]然而,将状态传入或传出回调函数可能很困难或尴尬。这种限制也抑制了函数的更多动态行为。函数对象解决了这些问题,因为函数实际上是完整对象的外观,带有自己的状态。

  1. 为什么函数指针难以将状态传入或传出回调函数函数的动态行为

  2. 如果函数不使用函数指针,程序如何调用函数

【问题讨论】:

  • 继续阅读你的 C++ 书籍。当您了解 lambdas 和 lambda 捕获时,都会进行解释。
  • 请澄清:“如果函数不使用函数指针,程序如何调用函数”——糟糕的语法让你很难理解你在问什么。人们可以修正语法,但首先他们需要知道你真正要问的是什么。
  • 只调用使用变量的函数指针可能会很棘手,因为变量在执行函数时可能会发生变化。为了解决这个问题,函数对象将正在使用的变量的状态复制到它自己的对象中。
  • 一般来说这是一个有趣的问题。但是你的语法让人难以阅读。并且如前所述,当您进一步了解 C++ 时,您会偶然发现函数对象。
  • @IvanRubinson 在引用其他网站时,指出cross-posting is frowned upon 通常会有所帮助

标签: c++ function-object


【解决方案1】:
  1. C中的函数指针而言,您需要将状态作为额外参数传递。这与具有闭包的 python、javascript 或 C++ 等语言相反。这意味着需要为该额外结构考虑存储持续时间。

  2. C 程序员使用函数指针。如果不使用函数指针,您将无法编写非常通用的代码。我们只是应用规则并将捕获的状态作为函数参数传递到结构中。

【讨论】:

  • @juanchopanza,重新措辞。
猜你喜欢
  • 2021-02-18
  • 2013-05-17
  • 2021-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-22
  • 1970-01-01
相关资源
最近更新 更多