回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这个函数是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。
回调函数机制:
1、定义一个函数(普通函数即可);
2、将此函数的地址注册给调用者;
3、特定的事件或条件发生时,调用者使用函数指针调用回调函数。
回调函数的好处:
解耦,更改函数地址就可以实现不同的功能
#include <QCoreApplication>
using namespace std;
#include<stdio.h>
#include<iostream>
//1、定义一个函数(普通函数即可);
typedef int(*callback)(int,int);//int类型的函数指针,callback被声明成了一种类型,
//2、将此函数的地址注册给调用者;
int getValue(int a,int b,callback p) //模拟API函数或DLL函数
{
return (*p)(a,b);
}
int add(int a,int b) //自己的实现函数要和函数指针形式相一致
{
return a+b;
}
int minus1(int a, int b)
{
return a-b;
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
//3、特定的事件或条件发生时,调用者使用函数指针调用回调函数。
int res1 = getValue(4,2,add);
std::cout<<" res1 = "<<res1;
int res2 = getValue(10,8,minus1);
std::cout<<" res2 = "<<res2;
return a.exec();
}