看板 C_and_CPP 關於我們 聯絡資訊
各位先進,午安... <(_ _)>  小的對 nonstatic virtual member function callback 有些困惑,  請看 VCR... http://codepad.org/tqEbvDzg 先看 class CBase 的部份,  它有兩個 nonstatic member function,一個是 Func(),  另一個是 Seriatim(),裡頭會呼叫 Func()。  Func() 是個 virtual function,  繼承它的類別若要使用 Seriatim(),  因為它的參數有 member function pointer,  我只能想到把 Seriatim 也寫成 virtual;  virtual void Seriatim(int n, CbFuncType cbFunc);  在 CBase 裡 typedef int (CBase::*CbFuncType)(int);  在 CDerv 裡 typedef int (CDerv::*CbFuncType)(int);  只是,Seriatim 裡頭的行為一模一樣,  僅僅是 CbFuncType cbFunc 這個問題,  CBase 所有衍生類別都必須要重新 implement Seriatim 函式,  讓我不禁在想,是不是有什麼神妙的方式可以讓所有子類別共用一個 Seriatim? --  追根究底所得到的東西,是失望的觀眾,以及狼狽的魔術師... De'Ring Practice http://www.wretch.cc/blog/miauwally/21246514 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.116.90.104
tomap41017:Seriatim傳MemPtr的用意是要執行不同的Func?如Func1,2, 06/21 16:00
tomap41017:這樣嗎?不然實在看不出來有何必要傳MemPtr 06/21 16:00
archon:是的,它將會有各式各樣不同的 func 被傳進去 AvA 06/21 16:03
tomap41017:感覺架構有地方可以修改,但我說不上來..@@ 06/21 16:04
tomap41017:試著把Seriatim移出CBase看看,然後統一使用CBase的介 06/21 16:05
tomap41017:面? XD 06/21 16:05
legnaleurc:善用 std::function 和 std::bind 06/21 16:18
legnaleurc:https://gist.github.com/988259 06/21 16:31