zoukankan      html  css  js  c++  java
  • 为什么要使用回调函数

      最近在代码中大量使用了callback函数,没有google到大神关于是否要更多或更少的使用callback函数的论述,可能是这个问题太白痴了吧,暂且陈述一下自己的观点。

      假如,有时候我们需要在逻辑上分2层,如下图:

     1 |------------------|
     2 |          High Level         |
     3 |------------------|
     4 |          Low Level          |
     5 |------------------|
     6 //如果这样写
     7 int low_do_a(int xx)
     8 {
     9   hgih_do_b(xx);
    10 }
    11 
    12 int hgih_do_b(int xx)
    13 {
    14   ...
    15 }
    16 int high_do_a(int)
    17 {
    18   ...
    19   low_do_a(xx);
    20   ...
    21 }
       那么逻辑上可能是个样子的:
      
      这种逻辑图令我很不爽,因为我可能还需要知道
    hgih_do_b是干什么的,层与层之间会有耦合,如HighLevel变了没有high_do_b。
      那么如果以下面的形式加工一下:
     1  int low_do_a(int xx, int (*do_something)(int xx, void *param), void *param)
     2  {
     3      ...
     4       if (do_something)
     5      do_something(xxx, param);
     6      ...
     7  }
     8     
     9  int hgih_do_b(int xx, void *param)
    10  {
    11      ...
    12 }
    13  int high_do_a(int)
    14 {
    15   ...
    16    low_do_a(xx, high_do_b, xxx);
    17    ...
    18  }
        这样一看,虽然实际上还是调用了上层,但是灵活性大增加,上层可以定制某一部分下层的行为,而且逻辑上来看应该是这个样子:
      
      这样一看逻辑就清晰了很多。
      注:这样做由于会有间接调用,因此,会有一些额外的传参与访存开销,对于
    MCU代码中对时间要求较高的代码要慎用。
    
    
  • 相关阅读:
    安装 Visual Studio 出现网络问题,无法连接
    开机时如何默认关闭小键盘
    nginx 443端口配置
    nginx启动提示 nginx: [emerg] the INET6 sockets are not supported on this platfor
    ffmpeg 常用命令
    linux下安装python3.7.2
    Win10的Hyper-V虚拟机上安装Ubuntu后显示分辨率问题
    Hyper-V安装CentOS修改分辨率
    Linux 设置简单密码
    nginx 80端口跳转到443
  • 原文地址:https://www.cnblogs.com/findstr/p/3525865.html
Copyright © 2011-2022 走看看