指针注册方式实现回调函数-c语言使用回调函数实现封装和多态
一、常见回调函数案例
//定义回调函数类型
typedef void(*CallbackFunction)(int);
//回调函数实现
void myCallback(int value) {
std::cout << "my value:" << value << std::endl;
}
//执行回调函数:接受一个回调函数参数
void funcAction(CallbackFunction callback,int value) {
if (callback != NULL) {
callback(value);
}
}
int main() {
funcAction(myCallback, 10);
return 0;
}
二、使用指针注册方式实现回调函数
1.回调函数实现C语言的多态
这种方式实现了c语言的多态。面向对象的多态的实现原理是一样的。
//定义回调函数类型
typedef int(*CallbackFunction)(int a,int b);
typedef struct data_t {
int a;
int b;
CallbackFunction callback;//函数管理器
}op_data;
//注册函数
void Register(op_data *data) {
int reslt = data->callback(data->a, data->b);
std::cout << "result:" << reslt << std::endl;
}
//加法回调函数
int add(int a,int b) {
return a + b;
}
//减法回调函数
int sub(int a, int b) {
return a – b;
}
int main() {
op_data *mydata = (op_data*)malloc(sizeof(op_data));
mydata->a = 10;
mydata->b = 5;
mydata->callback = add;
Register(mydata);
mydata->callback = sub;
Register(mydata);
free(mydata);
return 0;
}
网硕互联帮助中心




评论前必须登录!
注册