繼承 與 Callback...

看板C_and_CPP作者 (三腳貓的把戲)時間13年前 (2011/06/21 15:28), 編輯推噓3(305)
留言8則, 3人參與, 最新討論串1/2 (看更多)
各位先進,午安... <(_ _)>  小的對 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

06/21 16:00, , 1F
Seriatim傳MemPtr的用意是要執行不同的Func?如Func1,2,
06/21 16:00, 1F

06/21 16:00, , 2F
這樣嗎?不然實在看不出來有何必要傳MemPtr
06/21 16:00, 2F

06/21 16:03, , 3F
是的,它將會有各式各樣不同的 func 被傳進去 AvA
06/21 16:03, 3F

06/21 16:04, , 4F
感覺架構有地方可以修改,但我說不上來..@@
06/21 16:04, 4F

06/21 16:05, , 5F
試著把Seriatim移出CBase看看,然後統一使用CBase的介
06/21 16:05, 5F

06/21 16:05, , 6F
面? XD
06/21 16:05, 6F

06/21 16:18, , 7F
善用 std::function 和 std::bind
06/21 16:18, 7F

06/21 16:31, , 8F
文章代碼(AID): #1E04WZ5I (C_and_CPP)
文章代碼(AID): #1E04WZ5I (C_and_CPP)