作者archon (三腳貓的把戲)
看板C_and_CPP
標題繼承 與 Callback...
時間Tue Jun 21 15:28:31 2011
各位先進,午安... <(_ _)>
小的對 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