優先採取方案一
class B:public A
{} ;
不適合的話改成方案二
class B
{
private:
A a ;
public:
} ;
建立兩個專案
第一個是純遊戲
只會用到A
第二個是編輯器
會用到B
※ 引述《azureblaze (AzureBlaze)》之銘言:
: 我有兩個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: 219.85.216.197