Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 这段代码中的回调发生在哪里? 类添加 { Add(){cout_C++_Callback_Functor - Fatal编程技术网

C++ 这段代码中的回调发生在哪里? 类添加 { Add(){cout

C++ 这段代码中的回调发生在哪里? 类添加 { Add(){cout,c++,callback,functor,C++,Callback,Functor,和函子可以帮助回调机制,对吗 是的。您可以编写一个函数模板,该模板使用函子执行用户定义的操作,作为其操作的一部分;例如: class Add { Add(){cout<<"ctor";} void operator()(int a ,int b){return a+b;} } int main() { Add(3,4); } 一个特定的用法是std::sort算法,它可以使用用户提供的函子来比较不

和函子可以帮助回调机制,对吗

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

    class Add
    {
      Add(){cout<<"ctor";}
      void operator()(int a ,int b){return a+b;}

    }
    int main()
    {
      Add(3,4);
    }
一个特定的用法是
std::sort
算法,它可以使用用户提供的函子来比较不支持普通比较运算符的类型

那么这里发生了什么呢

它不是;您的代码不会编译。在修复返回值后(因为它返回的值不是
void
),您可以使用

do_stuff(Add(), 3, 4);

但这并不是特别有用。

这里没有这种情况。在你上面的do_stuff方法中,你已经将Fn f作为第一个参数传递了。我不能只传递函数的引用吗?这可以被认为是函子的替代品吗?换句话说,为什么要使用函子?v不能只传递需要回调的函数的引用吗??@Nikhil:函子(不是这个,而是一般的)比函数的优势在于它们是对象,所以它们可以将数据绑定到代码以形成闭包。但是要正确描述这一点需要一本书的整整一章。
do_stuff(Add(), 3, 4);
Add()(3,4);