[問題] 這情況有合適的pattern嗎? (template+多型)

看板C_and_CPP (C/C++)作者 (開大決)時間16年前 (2010/01/04 20:56), 編輯推噓0(0012)
留言12則, 2人參與, 最新討論串1/1
( *[1m *[m 為色碼,可以按 Ctrl+V 預覽會顯示的顏色 ) ( 未必需要依照此格式,文章條理清楚即可 ) 遇到的問題: (題意請描述清楚) class AlgoBase { }; class AlgoA : public AlgoBase { }; class AlgoB : public AlgoBase { public: void how_to_call_func_B(int i){}; }; template <class Type> class AlgoUser { AlgoBase *m_pAlgo; public: AlgoUser() { m_pAlgo = new Type; m_pAlgo->how_to_call_func_B(2010); // !! } }; 希望得到的正確結果: 期望使用的方式是 AlgoUser<AlgoA> 或 AlgoUser<AlgoB> 但我在 AlgoUser 裡會呼叫一個只有 AlgoB 才有的函數 我該怎麼把這函數包起來呢? 我有想過由 AlgoBase 再提供一個 virtual another_func()=0 但 AlgoB 的那個函數必須傳參數 不知道有什麼漂亮的寫法可以解決這個問題 謝謝大家的意見 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.115.50.10

01/04 21:07, , 1F
algo 實作一般使用 template method,由 public 的
01/04 21:07, 1F

01/04 21:07, , 2F
non-virtual function 放在 base 提供外界呼叫,內部需要
01/04 21:07, 2F

01/04 21:08, , 3F
自訂的部分做成 virtual function,由子類別實作。
01/04 21:08, 3F

01/04 21:10, , 4F
AlgoA 無,AlgoB 有的這種叫 hook,就是預設實作為空的
01/04 21:10, 4F

01/04 21:10, , 5F
virtual function,不是 hook 的那種則一定要子類別實作。
01/04 21:10, 5F

01/04 21:16, , 6F
如果你是打算在 AlgoUser 直接呼叫演算法的片段,那顯然就
01/04 21:16, 6F

01/04 21:16, , 7F
是設計上的錯誤了。
01/04 21:16, 7F

01/04 22:21, , 8F
請問是像這樣嗎 http://ppt.cc/3s1W
01/04 22:21, 8F

01/04 22:21, , 9F
我想我的設計真的需要修改, 謝謝你清楚的說明
01/04 22:21, 9F

01/04 22:26, , 10F
是那樣沒錯,然後如果是想做成 hook 的話,就不需要是
01/04 22:26, 10F

01/04 22:26, , 11F
pure virtual function,可以做成有預設實作的 virtual
01/04 22:26, 11F

01/04 22:27, , 12F
function,習慣上預設是什麼都不做。
01/04 22:27, 12F
文章代碼(AID): #1BGUM4Jp (C_and_CPP)
文章代碼(AID): #1BGUM4Jp (C_and_CPP)