日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

回调函数在C/C++中的使用

發布時間:2023/11/27 生活经验 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 回调函数在C/C++中的使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

回調函數就是一個通過函數指針調用的函數。假如把A函數的指針當作參數傳給B函數,然后在B函數中通過A函數傳進來的這個指針調用A函數,那么就是回調機制。A函數就是回調函數,而通常情況下,A函數是在系統符合你設定的條件下自動執行。

???????? 使用回調函數可以改善軟件的結構,提供軟件的復用性。

???????? 函數指針是一個指針,只是這個指針不像普通的指針指向一個變量,此時它指向的是一個函數,也就是它存儲的是一個函數的指針。

???????? C++的類成員函數不能像普通函數那樣用于回調,因為每個成員函數都需要有一個對象實例去調用它。通常情況下,要實現成員函數作為回調函數,一種常用的方法就是把該成員函數設計為靜態成員函數。

#include <iostream>typedef int(*Fun11)(int, int);
typedef float(*Fun12)(float, float);int min(int a, int b)
{return a < b ? a : b;;
}float max(float a, float b)
{return a > b ? a : b;
}int test1()
{Fun11 pFun1 = NULL;pFun1 = &min;int ret1 = pFun1(-1, 2);std::cout<<"min value is: "<<ret1<<std::endl;Fun12 pFun2 = NULL;pFun2 = &max;float ret2 = pFun2(3.4, -2.2);std::cout<<"max value is: "<<ret2<<std::endl;return 0;
}typedef void(*Fun2)(void*);class CallBack;
class CallBackTest;class CallBackTest {
public:CallBackTest() {}~CallBackTest() {}void registerProc(Fun2 fptr, void* arg = NULL){m_fptr = fptr;if (arg != NULL) {m_arg = arg;}}void doCallBack(){m_fptr(m_arg);}private:Fun2 m_fptr;void* m_arg;
};class CallBack {
public:CallBack(CallBackTest* t) : a(2){if (t) {t->registerProc((Fun2)display, this);}}~CallBack() {}static void display(void* _this = NULL){if (!_this) {return;}CallBack* pc = (CallBack*)_this;pc->a++;std::cout<<"a is "<<pc->a<<std::endl;}private:int a;
};int test2()
{//http://www.360doc.com/content/14/0825/13/15077656_404487615.shtmlCallBackTest* cbt = new CallBackTest();CallBack* cb = new CallBack(cbt);cbt->doCallBack();return 0;
}void callback31() 
{ std::cout<<"this a callback function 31"<<std::endl; 
} int callback32(int num) 
{ std::cout<<"this input param value is: "<<num<<std::endl;return 0; 
}void Caller31(void (*ptr)())
{ (*ptr)(); 
}void Caller32(int n, int (*ptr)(int))
{(*ptr)(n); 
}int test3() 
{ Caller31(callback31); Caller32(32, callback32);return 0; 
} int main()
{test1();test2();test3();return 0;
}


總結

以上是生活随笔為你收集整理的回调函数在C/C++中的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

歡迎分享!

轉載請說明來源于"生活随笔",并保留原作者的名字。

本文地址:回调函数在C/C++中的使用