当前位置: 首页 > news >正文

秦皇岛网站制作小程序开发个人资料网站怎么做

秦皇岛网站制作小程序开发,个人资料网站怎么做,ui设计页面,七牛云存储 wordpress连接失败回调函数 当程序跑起来时,一般情况下,应用程序会时常通过API调用库中实现准备好的函数。但是有些库函数需要先传一个函数给它,好在合适时调用。传入且被调用的函数叫做回调函数。 基础知识 所谓回调,就是模块A要通过模块B的某个函…

回调函数


当程序跑起来时,一般情况下,应用程序会时常通过API调用库中实现准备好的函数。但是有些库函数需要先传一个函数给它,好在合适时调用。传入且被调用的函数叫做回调函数。

基础知识

所谓回调,就是模块A要通过模块B的某个函数b()完成一定功能,但是函数b无法完成所有的功能,需要反过来调用模块A中的某个函数a()来完成,这个a()就是回调函数

  1. 约定接口规范

    在模块B必须约定接口规范,也就是定义回调函数a()的函数原型

    这里回调函数原型的定义最好遵循

    typedef void(*SCT_XXX)(LPVOID Ip,const CBParamStruct& cbNode);
    
    • SCT_XXX是指向函数的指针类型(原文说是回调函数的名称)
    • IP是回调上下文
    • CBParamStruct是回调参数,一般由于要回调的参数不止一个,所以定义一个结构体更加方便
  2. 回调函数的注册

    为了让模块B知道自己将要用的回调函数,必须有一个函数或者语句进行注册回调函数

    注册回调函数的定义遵循

    void RFC_XXX(SCT_XXX pnf,LPVOID Ip);
    
    • RFC_XXX是注册函数名
    • pfn是SCT_XXX类型的指针变量指向回调函数
    • Ip是回调上下文
    • 一般在A模块初始化完B模块后调用,将A模块中定义的回调函数地址赋值给pfn,Ip赋值为this
  3. 在A模块中要进行的事情

    首先将回调函数声明成静态的

    static void CF_XXX(LPVOID Ip,const CBParamStruct& cbNode);
    

    函数的参数必须与B模块中回调函数原型参数保持一致

回调函数的实现

void basketball()//函数1
{printf("选择篮球");
}
void football()//函数2
{printf("选择足球");
}
void selectball(void (* ball)())//函数3
{printf("选择什么球?");ball();
}
int main(void)
{selectball(basketball);selectball(football);return 0;
}

函数1和2都属于模块A,函数3属于模块B,主函数在调用模块B中的函数时,模块B得不到答案,故传递指针给函数3 ,得到正确答案

进阶回调


C语言回调实例

//callbackText.c
//1.定义函数onHeight(回调函数)
//@onHeight 函数名
//@height 参数
//@context 上下文
void onHeight(double height,void* context)
{sprint("current height is %lf",height);
}
//2.定义onHeight函数的原型
//@CallbackFun 指向函数的指针类型
//@height 回调参数,当有多个参数时,可以定义一个结构体
//@context 回调上下文,在c中一般传入nullptr,在c++中可以传入对象指针
typedef void (*CallbackFun)(double height,void* context);
//3.定义注册回调函数
//@registHeightCallback 注册函数名
//@callback 回调函数原型
//@context 回调上下文
void registHeightCallback(CallbackFun callback,void* context)
{double h=100;callback(h,nullptr);
}
//4.main函数
void main()
{registHeightCallback(onHeight,nullptr);
}

很多时候,注册的时候并不调用回调函数,而是在其他函数中调用,那我们可以定义一个CallbackFun全局指针变量,在注册的时候将函数指针赋给它,在调用的时候调用它

//定义全局指针变量
CallbackFun* m_pCallback;
//定义注册回调函数
void registHeightCallback(CallbackFun callback,void* context)
{m_pCallback = callback;
}
//定义调用函数
void printHeightFun(double height)
{m_pCallback(height,nullptr);
}

C++回调函数


C++回调函数扩展自C,与C略有不同的是,C++可以使用全局函数和静态函数作为回调函数。考虑到全局函数会破坏封装性,所以一般都用静态成员函数。故除了理解函数指针,还要理解静态成员函数,具体一点是在静态函数成员中访问非静态成员函数的方法,因为我们很可能需要获取静态成员函数中的数据。

使用场景描述:使用他人提供的SDK,如:

//CallbackFun类型
//@CallbackFun 指向函数的指针类型
//@height      回调参数,当有多个参数时,可以定义一个结构体
//@contex      回调上下文,在C中一般传入nullptr,在C++中可传入对象指针
typedef void (*CallbackFun)(double height, void* contex);//注册回调函数接口
//@registHeightCallback 注册函数名
//@callback             回调函数原型
//@contex               回调上下文
void registHeightCallback(CallbackFun callback, void* contex)

首先定义一个静态成员函数并注册

//sensorTest.cpp
//接收数据类class Sensor
class Sensor{
public:Sensor(){}~Sensor(){}//定义回调函数onHeightstatic void onHeight(double height, void* contex){cout << "current height is  " << height << endl;}//定义注册回调函数void registCallback(){registHeightCallback(onHeight, this);}
};//main 函数
void main()
{Sensor sens;sens.registCallback();
}

静态成员函数访问非静态成员函数的方法

在静态成员函数中只能出现静态变量和静态函数的,但是有些时候需要访问非静态成员函数或者变量

//接收数据类class Sensor
class Sensor{
public:Sensor(){}~Sensor(){}//定义回调函数onHeightstatic void onHeight(double height,void* context){//cout << "current height is "<< height << endl;Sensor* sen = (Sensor*)context;if(sen)//判断sen是否有效sen->getHeight(height);}//定义注册回调函数void registCallback(){registHeightCallback(ontHeight,this);}//新增成员函数void getHeight(double height){cout << "current height is "<< height <<endl;}
};

回调对象


http://www.yayakq.cn/news/186663/

相关文章:

  • 快排做网站排名电子商务有限公司经营范围
  • 微网站费用海口网络公司网站建设
  • 免费网站推广软件下载什么搜索引擎搜索最全
  • 高明网站制作中国排名前十互联网公司
  • 微信手机客户端网站建设恒一信息深圳网站建设公司2
  • 预约挂号php网站ftp急着后台密码忘记了上海金工建设集团有限公司网站
  • 怎样做自己的网站百度网页版浏览器入口官网
  • phton可以做网站吗淘宝禁止了网站建设类
  • 建设工程合同 网站手机访问pc网站自动跳转手机端网站代码
  • 网站优化网络公司天津做车抵的公司
  • iframe网站如何做统计网站框架搭建设计
  • 漳平建设局网站wordpress轻语博客
  • 泰兴市住房和城乡建设局网站青岛知名网站建设
  • 网站建设 移动端 和 PC端建筑工程找活网站
  • 官方网站下载官方版本php cms系统
  • 网站建设与推广是什么意思wordpress没有图片不显示
  • wap小说网站源码长春网站制作建设
  • 网站开发模wordpress模板 sky
  • 网站第三方登录怎么做wordpress themeforest
  • 赔率网站怎么做大连金州区房价
  • 网站后台信息维护要怎么做在godaddy做网站贵吗
  • 网站做中英版简阳seo排名优化培训
  • 如何访问国外网站云南网站开发网络公司前10
  • 网站推广方案策划书2000远安网站建设
  • 马鞍山网站建设推广有哪些做室内设计好用的网站
  • html购物网站设计论文智能管理系统定制开发
  • 软件工作室网站模板网站文件结构
  • p2p提供网站建设违法丹徒网站建设代理商
  • 网站建设吉金手指专业11广西一站网网络技术集团有限公司
  • 龙海网站建设价格seo技术培训茂名