看板 C_and_CPP 關於我們 聯絡資訊
: Base* Get( int iType ) : { : switch( iType ) : { : case 1: : return new D1; : break; : case 2: : return new D2; : break; : case 3: : return new D3; : break; : } : } : 像這種東西在以後type增減的狀況下必須不斷對Get()做調整 : 請問有沒有什麼方法可以解決這種問題? 可以使用full template specialization 每增加一種新的type就要多宣告一個新的specialization 好處是不用回頭修改原本的function template<class T> Base* Get() { return new T; } template<> Base* Get<D1>() { return new D1; } template<> Base* Get<D2>() { return new D2; } template<> Base* Get<D3>() { return new D3; } int main() { Base* pD1 = Get<D1>(); Base* pD2 = Get<D2>(); Base* pD3 = Get<D3>(); delete pD1; delete pD2; delete pD3; return 0; } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 98.254.62.107
angleevil:<m.m>謝謝 06/18 13:35
NIKE74731:可是這樣要如何將input跟子類別對應起來呢? 06/18 17:14
NIKE74731:比如在win32 console中輸入1 才new出D1這個子類別 06/18 17:15
NIKE74731:也就是說程式在一開始執行時是沒有已經產生的物件 06/18 17:16
dk3208:to 樓上,template沒有辦法處理run time的型別資訊 06/18 23:43