close

一轉眼也快過試用期了

雖然是大公司又離家近,但有點覺得工作很無聊...

可能是剛進去分配到的工作都很... 就是那種不用動腦的工作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

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 頁頁頁六滴 的頭像
    頁頁頁六滴

    人森很精彩,所以要把所有事情都記起來=ˇ=

    頁頁頁六滴 發表在 痞客邦 留言(0) 人氣()