[問題] 相似的class中減少code duplication
看板C_and_CPP (C/C++)作者azureblaze (AzureBlaze)時間13年前 (2013/04/26 23:06)推噓6(6推 0噓 23→)留言29則, 8人參與討論串1/3 (看更多)
我有兩個class A和B。
他們做的事差不多,只在某些細節上不一樣
大部分的地方都可以透過拉出一個共同的base class
再繼承來解決。
不過有些地方可能長這樣
A::doSomething(){ B::doSomething(){
BaseMethod1(); BaseMethod1();
BaseMethod2();
B_Specific_Operations();
A_Specific_Operations();
BaseMethod2();
BaseMethod3(); BaseMethod3();
} }
在我的用途中,A是遊戲 B是遊戲編輯器
他們底下跑的東西都差不多,可是遊戲編輯器在某些地方
可能要插入特別的ui處理code,關閉或開啟某些功能,或是
使用不同的初始值。
我目前處理的方法是全部寫在一起然後用macro產生兩個執行檔
不過我現在希望能將相同的部份弄成dll然後A和B都連結他
目前想到的一個解決方法是把AB不同的地方都在Base做
一個virtual method,然後AB其中一邊就留白
不過差異的地方很細碎,這麼做最後會把整個流程打得很散
同時開發還在相當不穩定的狀態,這樣每次要插入新的code的
時候都很麻煩。
另一個方法是直接用if分開AB
不過遊戲一定只用A,編輯器一定只用B,實在不想在runtime
還要付出判斷的成本
目前看起來還是原先的純macro方法最乾淨
還是說反正硬碟空間不值錢build成兩個獨立的exe就好了?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.168.88.7
推
04/26 23:17, , 1F
04/26 23:17, 1F
→
04/26 23:17, , 2F
04/26 23:17, 2F
→
04/26 23:40, , 3F
04/26 23:40, 3F
→
04/26 23:40, , 4F
04/26 23:40, 4F
→
04/27 00:17, , 5F
04/27 00:17, 5F
→
04/27 00:18, , 6F
04/27 00:18, 6F
→
04/27 00:19, , 7F
04/27 00:19, 7F
→
04/27 00:19, , 8F
04/27 00:19, 8F
我想這樣做可能還是跟virtual一樣會有程式被分成一大堆零碎的一行function問題?
推
04/27 01:42, , 9F
04/27 01:42, 9F
→
04/27 01:43, , 10F
04/27 01:43, 10F
→
04/27 01:43, , 11F
04/27 01:43, 11F
→
04/27 01:43, , 12F
04/27 01:43, 12F
→
04/27 01:44, , 13F
04/27 01:44, 13F
整個程式是剛從C踏入C++的時候開始寫的,而現在想要改的就是一開始寫的部份
現在看起來也是相當頭痛。
推
04/27 02:26, , 14F
04/27 02:26, 14F
推
04/27 14:08, , 15F
04/27 14:08, 15F
→
04/27 14:08, , 16F
04/27 14:08, 16F
→
04/27 14:09, , 17F
04/27 14:09, 17F
推
04/27 14:11, , 18F
04/27 14:11, 18F
→
04/27 14:12, , 19F
04/27 14:12, 19F
主要是這是動作遊戲的關卡編輯器,所以我希望編輯器render出來的東西
能和遊戲本身幾乎一樣。
也就是說編輯器會是一個AI/物理暫停,然後掛入編輯用UI的遊戲
→
04/27 15:28, , 20F
04/27 15:28, 20F
→
04/27 15:29, , 21F
04/27 15:29, 21F
現在想想如果需求是
1.能夠自由的在任何地方加入[共用/A專用/B專用]的code
2.compile-time完成
用macro好像還是最好的選擇
不然就是想辦法改程式,讓1.不再是個需求
最後一個心得就是
如果想學程式來做什麼很希望能完成的東西,絕對不要一開始就做他
不然你會在做了N年後咒罵年輕不懂事的自己寫的爛code
※ 編輯: azureblaze 來自: 118.168.95.211 (04/27 23:30)
→
04/28 19:47, , 22F
04/28 19:47, 22F
→
04/28 19:49, , 23F
04/28 19:49, 23F
→
04/28 20:49, , 24F
04/28 20:49, 24F
→
04/28 22:36, , 25F
04/28 22:36, 25F
推
05/03 00:20, , 26F
05/03 00:20, 26F
→
05/03 00:21, , 27F
05/03 00:21, 27F
→
05/03 00:21, , 28F
05/03 00:21, 28F
→
05/03 00:22, , 29F
05/03 00:22, 29F
討論串 (同標題文章)
以下文章回應了本文 (最舊先):
完整討論串 (本文為第 1 之 3 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章