一轉眼也快過試用期了
雖然是大公司又離家近,但有點覺得工作很無聊...
可能是剛進去分配到的工作都很... 就是那種不用動腦的工作XD
就是些雜事啊什麼的,比較需要花時間去學習的工作就不會分配給我這樣
雖然我的錢也是領一樣啦,只是相對無聊這樣
不過leader覺得我的表現不好... 我也就只能努力了XD
如果最後走人的話,我也不能說什麼,就只能說向性不合吧=ˇ=
今天來記錄下比較新的callback function使用方法吧
可以參考這篇: https://stackoverflow.com/questions/400257/how-can-i-pass-a-class-member-function-as-a-callback
首先介紹一下一個新的type:function
簡單說就是把函式變成一個type
比如說這樣:
function<int(int, int)> func = [](int a, int b)->int {return a + b;};
這樣func就是一個a+b的函式了
以下秀個簡單的範例:
server s;
client c1("client1");
s.setStaticCallback(std::bind(&client::StaticFunc));
s.setCallback(std::bind(&client::MemberFunc, c1));
s.excuteCallback();
s.excuteStaticCallback();
s.setTradCallback(&client::StaticFunc);
s.excuteTradCallback();
client c2("client2");
s.setCallback(std::bind(&client::MemberFunc , c2));
s.excuteCallback();
s.excuteStaticCallback();
然後再介紹一個函式:bind
這個bind其實就是一個wrapper的概念,把function再包一層的意思
可以把一些參數之類的東西一起包進去,算是增加活用度和可讀性
比較詳細的資訊可以google一下,之後有機會再來記錄XD
所以前面這一行:
s.setStaticCallback(std::bind(&client::StaticFunc));
這一行就是包一個client的static function進去
至於你說為什麼要用reference... 其實把function想成一個物件就可以理解了
reference就不用再複製一份物件出來了
然後是第二種 member function:
s.setCallback(std::bind(&client::MemberFunc, c1));
這時候就再提一下,其實在前一篇有講過,C++的member有默認將本身物件的指標(this)當作參數,以便去使用本身的member
所以std::bind(&client::MemberFunc, c1),其實就是把c1當成參數傳進MemberFunc裡面,用bind包成一個物件後設定到callback這樣
這樣在s裡面的callback function就會是物件c1的member function了
看起來比之前的舊方法簡單也好理解吧
使用上也方便許多
簡單記錄到這裡~ 8888888