Re: [閒聊] 程式大師請進
※ 引述《ZooseWu (動物園)》之銘言:
: 我有兩個class A 與 B
: 他們有80%的功能與函示名稱相似
: 然後我只有runtime的時候才知道物件身上有哪一個class
: 我有一個好方法可以簡單的呼叫 (A|B).function嗎
: 對了class不是我寫的
: 所以我沒辦法透過寫interface然後讓AB繼承這種方法
碰到奇怪的東西我偶爾會這樣做:
基底類別:
01. class ISubject
02. {
03. protected:
04. virtual bool Prepare(Input* input) = 0;
05. virtual bool Excute(Input* input) = 0;
06. virtual bool Finish(Input* input) = 0;
07.
08. public:
09. virtual bool Do(Input* input) = 0;
10. };
共通線:
01. class SubjectBase : public ISubject
02. {
03. protected:
04. virtual bool Prepare(Input* input) override
05. {
06. // 做點初始化跟共通會做的事情
07. }
08.
09. virtual bool Excute(Input* input) override
10. {
11. // 留白
12. }
13.
14. virtual bool Finish(Input* input) override
15. {
16. // 做點收尾跟釋放資源的事情
17. }
18.
19. public:
20. virtual bool Do(Input* input)
21. {
22. if(!Prepare(input))
23. {
24. // 初始化出錯,輸出錯誤
25. return false;
26. }
27.
28. if(!Excute(input))
29. {
30. // 執行階段出錯,輸出錯誤
31. return false;
32. }
33.
34. if(!Finish(input))
35. {
36. // 釋放資源階段出錯,輸出錯誤
37. return false;
38. }
39.
40. return true;
41. }
42. };
個人線:
1. class SubjectA : SubjectBase
2. {
3. protected:
4. virtual bool Excute(Input* input) override
5. {
6. // 做點SubjectA會做的事
7. }
8. };
以此類推
最後看你要用map還是啥弄一個分支
執行靠呼叫Do(input);
缺點是寫起來很麻煩
對只有幾個的有點過去包裝
優點是寫完後很懶人
尤其是當你要處理幾十幾百個上古遺物的時候
只要開一個小class去繼承就能直接寫
我只會靜態語言 對ㄚ==
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.32.48.170 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Marginalman/M.1636627853.A.EF7.html
※ 編輯: yam276 (114.32.48.170 臺灣), 11/11/2021 18:51:20
推
11/11 18:51,
4年前
, 1F
11/11 18:51, 1F
推
11/11 18:51,
4年前
, 2F
11/11 18:51, 2F
→
11/11 18:52,
4年前
, 3F
11/11 18:52, 3F
推
11/11 18:52,
4年前
, 4F
11/11 18:52, 4F
→
11/11 18:52,
4年前
, 5F
11/11 18:52, 5F
→
11/11 18:53,
4年前
, 6F
11/11 18:53, 6F
→
11/11 18:54,
4年前
, 7F
11/11 18:54, 7F
→
11/11 18:54,
4年前
, 8F
11/11 18:54, 8F
→
11/11 18:54,
4年前
, 9F
11/11 18:54, 9F
→
11/11 18:55,
4年前
, 10F
11/11 18:55, 10F
→
11/11 18:55,
4年前
, 11F
11/11 18:55, 11F
→
11/11 18:55,
4年前
, 12F
11/11 18:55, 12F
推
11/11 18:56,
4年前
, 13F
11/11 18:56, 13F
→
11/11 18:58,
4年前
, 14F
11/11 18:58, 14F
→
11/11 18:58,
4年前
, 15F
11/11 18:58, 15F
→
11/11 19:00,
4年前
, 16F
11/11 19:00, 16F
推
11/11 19:10,
4年前
, 17F
11/11 19:10, 17F
討論串 (同標題文章)