【问题标题】:Where is thee callback happening in this code?这段代码中的回调发生在哪里?
【发布时间】:2013-05-22 17:54:44
【问题描述】:
    class Add
    {
      Add(){cout<<"ctor";}
      void operator()(int a ,int b){return a+b;}

    }
    int main()
    {
      Add(3,4);
    }

添加是函子。函子可以帮助回调机制吗?那么它发生在哪里呢??

【问题讨论】:

  • 这里没有发生。

标签: c++ callback functor


【解决方案1】:

函子可以帮助回调机制吗?

是的。您可以编写一个函数模板,它使用函子来执行用户定义的操作,作为它正在执行的任何操作的一部分;例如:

template <typename Fn>
void do_stuff(Fn f, int a, int b) {
    int c = f(a, b);
    do_something(c);
}

然后注入你的操作:

do_stuff(Add(), 3, 4);

一个特定用途是std::sort 算法,它可以使用用户提供的函子来比较不支持普通比较运算符的类型。

那么它发生在哪里??

不是;您的代码无法编译。修复返回值后(因为它返回的值不是void),您可以创建并调用一个函数

Add()(3,4);

但这并不是特别有用。

【讨论】:

  • 在您上面的 do_stuff 方法中,您已将 Fn f 作为第一个参数传递。我不能只传递对函数的引用。这可以被认为是函子的替代品吗?换句话说,为什么要使用函子?不能 v 只是将引用传递给需要回调的函数吗??
  • @Nikhil:函子(不是这个,而是一般而言)优于函数的优点是它们是对象,因此它们可以将数据绑定到代码以形成 闭包。但要恰当地描述这一点,需要一本书的一整章。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-03
  • 1970-01-01
相关资源
最近更新 更多