VPP 協議組件提供了許多的函數接口供開發者調用,同時也提供了很多的回調函數接口需要我們去實現,而由協議棧內部來調用。說白了,回調函數就是一個函數指針,協議棧通過一個函數指針,指向我們注冊給回調函數接口的函數,達到函數由我們實現,他們調用的目的。
下面舉一個簡單的例子,讓大家有一個更直接的認識:
[cpp]
#include<stdio.h>
// 聲明函數指針
typedef int (*operation)(int x,int y);
// 定義函數指針變量
operation operation_var = 0;
// 定義回調函數接
int pFun_callback(operation pCallback)
{
if(0!=pCallback)
{
operation_var = pCallback ;
return 0 ;
}
return 1;
}
// 注冊回調函數
int add(int x,int y)
{
return (x+y);
}
int sub(int x,int y)
{
return (x>y? (x-y):(y-x));
}
int multiplication(int x,int y)
{
return (x*y);
}
int main(int agrc,char *agrv[])
{
int a = 10, b = 15 ;
int result ;
if(!pFun_callback(add))
result = (*operation_var)(a,b);
printf("The value of result:%d\n",result);
return 0;
}
回調函數其實就這麼簡單,大家不妨試試效果,這樣會不僅會加深對回調函數的理解,也可以作為對C語言中函數指針知識的回顧。如今許多的庫,封裝好自己的代碼,別人看到的只有一些接口,相信懂得了這些知識你也可以做一個“黑盒子組件”,提供一些函數給別人調用,也可以提供一些函數給自己調用,讓別人來實現。