1. 程式人生 > >C++回撥函式的基本理解和使用

C++回撥函式的基本理解和使用

回撥函式就是一個通過函式指標呼叫的函式。如果你把函式的指標(地址)作為引數傳遞給另一個函式,當這個指標被用來呼叫其所指向的函式時,我們就說這是回撥函式。回撥函式不是由該函式的實現方直接呼叫,而是在特定的事件或條件發生時由另外的一方呼叫的,用於對該事件或條件進行響應。
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; }

可以把回撥函式和呼叫函式封裝承類再呼叫。