关于回调,在C++ 面向对象里面好像并没有什么比较被关注,感觉比较弱化的一个概念,但是从作为从C开发过来的人,对于回调并不陌生,这么重要的一种方式在c++中怎么没有提及?至少很少见到设置回调的,这次就回调这个思想就在c++ 里面谈一下个人的见解:

C开发,被划分为面向过程式开发,也就是遵照计算机的顺序执行 方式开发,但有的时候编写一个函数,希望这个函数执行到某一个结果时就处理一个特定的任务 比如通知一下调用者执行的进度,得到进度怎么处理这个进度的信息是调用者决定的,给出这个进度并实际触发处理进度是被调用者决定的,什么时候来触发处理进度?调用者不知道,这个时候由主动调用转变成被动被调用。 这种调用关系由主变从,其实就是一个 回调。

在C++ (oop面向对象)的编程中,调用关系更加复杂化,而这种回调的思想,其实就包含在其中,c++的设计者应该是希望弱化这些概念,降低使用者的工作量(制作工具的人,总是希望使用工具的人就单纯好好使用工具即可,所以总云:开发者不需要关系XX细节,能快速构建XX之类,所以多有知其然不知其所以然的困惑。 不过,作为从嵌入式开发过来的码农,总是喜欢刨根问底啊)。

 

这个回调关系的体现,就在继承关系中的 虚函数 中。
虚函数,用一句经典的话概括一下:使用基类的指针或引用指向派生类的对象,通过该指针或引用调用的是派生类的方法。
上一段代码解释这一句:
class A  
{  
public:  
    virtual void foo()  
    {  
        cout<<"A::foo() is called"<<endl;  
    }  
};  
class B:public A  
{  
public:  
    void foo()  
    {  
        cout<<"B::foo() is called"<<endl;  
    }  
};  
int main(void)  
{  
    A *a = new B();  
    a->foo();   // 在这里,a虽然是指向A的指针,但是被调用的函数(foo)却是B的!  
    return 0;  
}  

 

虚函数的调用场景和对应关系,换一张图概括:
 C++中被隐藏的回调


橙色线条标出了回调,B类调用A类的方法,A类对应方法有转而调用B类的方法。

所以在C++中要回调,用c++的虚函数即可,如果非要搞成c里面一样注册回调然后调用,也不是没有办法,原理一样,预先设置一个函数地址进去,然后调用,不过如果被注册的函数是封装在一个类里面,就没那么简单了,因为,一个方法(函数)可能属于一个具体的对象,也可能属于 类。

具体的实施方法,个人的另一篇可参考:https://blog.csdn.net/u012459903/article/details/85259687

 

相关文章:

  • 2021-12-12
  • 2022-02-16
  • 2021-11-17
  • 2022-01-07
  • 2021-11-04
  • 2021-10-29
  • 2021-10-20
猜你喜欢
  • 2021-08-04
  • 2021-12-28
  • 2021-08-01
  • 2021-06-17
  • 2022-12-23
  • 2022-12-23
  • 2022-02-08
相关资源
相似解决方案