深圳微商城网站建设,德国设计网站,知乎app开发公司,长沙网站建设 鼎誉系列文章目录 文章目录 系列文章目录前言一、回调函数1.1 回调函数基本概念1.2 简单实现 二、代码案例1.代码示例 总结 前言
了解回调函数的基本概念#xff0c;函数指针的使用、简单信号与槽的实现机制#xff1b; 一、回调函数
1.1 回调函数基本概念
回调函数就是一个通…系列文章目录 文章目录 系列文章目录前言一、回调函数1.1 回调函数基本概念1.2 简单实现 二、代码案例1.代码示例 总结 前言
了解回调函数的基本概念函数指针的使用、简单信号与槽的实现机制 一、回调函数
1.1 回调函数基本概念
回调函数就是一个通过函数指针调用的函数。如果你把函数的指针地址作为参数传递给另一个函数当这个指针被用来调用其所指向的函数时我们就说这是回调函数。 A “callback” is any function that is called by another function which takes the first function as a parameter。 也就是说函数 F1 调用函数 F2 的时候函数 F1 通过参数给 函数 F2 传递了另外一个函数 F3 的指针在函数 F2 执行的过程中函数F2 调用了函数 F3这个动作就叫做回调Callback而先被当做指针传入、后面又被回调的函数 F3 就是回调函数。 1.2 简单实现 创建函数指针指向指定函数。 void hanshus1()
{cout my hanshus1endl;
}int hanshus2(int)
{cout my hanshus2endl;return 0;
}void (*hanshu1)();
int (*hanshu2)(int);
int main()
{hanshu1 hanshus1;hanshu1(); // 输出 my hanshus1 hanshu2 hanshus2;hanshu2(2); // 输出 “my hanshus2”
}二、代码案例 简单实现信号与槽机制 参考代码 https://blog.csdn.net/weixin_41374099/article/details/115687655 1.代码示例 代码如下示例 #include iostream
#include stdio.h
#include stdlib.h
#include time.h
using namespace std;#define MAX_SLOT_FUNCTION 20 //一个信号最多连接的槽函数数 //一个函数可以被任意多个信号连接//槽函数类型
typedef void (*slot_t)();//信号类型
typedef struct _signal_t
{slot_t slot[MAX_SLOT_FUNCTION];int count; //槽函数数量
}signal_t;//信号初始化
signal_t* signal();//添加槽函数
void connect(signal_t* _signal, slot_t _slot);//发射信号
void emit(signal_t* _signal);//销毁
void del(signal_t* _signal);//信号初始化
signal_t* signal()
{signal_t* s (signal_t*)malloc(sizeof(signal_t));s-count 0;for (int i 0; i MAX_SLOT_FUNCTION; i) {s-slot[i] NULL;}return s;
}//添加槽函数
void connect(signal_t* _signal, slot_t _slot)
{_signal-slot[_signal-count] _slot;_signal-count;
}//发射信号
void emit(signal_t* _signal)
{for (int i 0; i _signal-count; i){slot_t func _signal-slot[i];if (func ! NULL) // {func();}}
}//销毁
void del(signal_t* _signal) {for (int i 0; i _signal-count; i){_signal-slot[i] NULL;}_signal-count 0;free(_signal);
}//准备几个槽函数
void setup()
{static int i 0;printf(setup 我被点击了%d次啊啊啊啊\n, i);
}void draw()
{static int i 0;printf(draw 我被点击了%d次啊啊啊啊\n, i);
}void loop()
{static int i 0;printf(loop 我被点击了%d次啊啊啊啊\n, i);
}void test()
{//自定义信号signal_t* clicked signal();signal_t* moved signal();connect(clicked, setup);connect(clicked, draw);connect(clicked, loop);connect(moved, setup);connect(moved, draw);//发射信号printf(---------------------------------------\n);emit(clicked);emit(clicked);printf(---------------------------------------\n);emit(moved);emit(moved);emit(moved);printf(---------------------------------------\n);emit(clicked);emit(clicked);emit(clicked);printf(---------------------------------------\n);}
int main()
{test();return 0;
}
运行截图 总结
回调函数和普通函数的区别函数指针的使用信号与槽的机制