C++回撥函式的基本理解和使用
阿新 • • 發佈:2019-02-19
回撥函式就是一個通過函式指標呼叫的函式。如果你把函式的指標(地址)作為引數傳遞給另一個函式,當這個指標被用來呼叫其所指向的函式時,我們就說這是回撥函式。回撥函式不是由該函式的實現方直接呼叫,而是在特定的事件或條件發生時由另外的一方呼叫的,用於對該事件或條件進行響應。
https://baike.baidu.com/item/%E5%9B%9E%E8%B0%83%E5%87%BD%E6%95%B0/7545973?fr=aladdin
回撥函式機制:
1、定義一個函式(普通函式即可);
2、將此函式的地址註冊給呼叫者;
3、特定的事件或條件發生時,呼叫者使用函式指標呼叫回撥函式。
注:為什麼要特定事件或條件發生?不應該隨時都可以呼叫回撥函式嗎?
以下是回撥函式的兩種使用方式(簡單理解):
1、
#include <stdio.h>
typedef int(*callback)(int,int);
int add(int a,int b,callback p){
return (*p)(a,b);
}
int add(int a,int b){
return a+b;
}
int main(int argc,char *args[]){
int res = add(4,2,add);
printf("%d\n",res);
return 0;
}
在這個例子中,可以看到,我們定義了一個callbak的函式指標,引數為兩個int,返回值為int,通過呼叫函式地址來進行簡單的相加運算。
2、
#include <stdio.h>
typedef int (callBack)(const void *buffer,size_t size,char *p_out);
void callFunc(callBack *consume_bytes, char *p_out) {
printf("callFunc\n");
const void *buffer = NULL;
consume_bytes(buffer,0,p_out); //傳入值可以隨便填
}
int callBackFunc(const void *buffer, size_t size, char *p_out){
printf("callBackFunc\n");
memset(p_out,0x00,sizeof(char)*100);
strcpy(p_out,"encoderCallback:this is string.");
return 1;
}
int main(int argc,char *args[]){
char p_out[100];
callFunc(callBackFunc,p_out);
printf("%s\n",p_out);
return 0;
}
可以把回撥函式和呼叫函式封裝承類再呼叫。