Re: [問題] template一問

看板C_and_CPP作者 (alpine skier)時間14年前 (2011/06/18 05:09), 編輯推噓1(104)
留言5則, 3人參與, 最新討論串2/9 (看更多)
: 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

06/18 13:35, , 1F
<m.m>謝謝
06/18 13:35, 1F

06/18 17:14, , 2F
可是這樣要如何將input跟子類別對應起來呢?
06/18 17:14, 2F

06/18 17:15, , 3F
比如在win32 console中輸入1 才new出D1這個子類別
06/18 17:15, 3F

06/18 17:16, , 4F
也就是說程式在一開始執行時是沒有已經產生的物件
06/18 17:16, 4F

06/18 23:43, , 5F
to 樓上,template沒有辦法處理run time的型別資訊
06/18 23:43, 5F
文章代碼(AID): #1D_3CTnd (C_and_CPP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
問題
0
18
以下文章回應了本文
完整討論串 (本文為第 2 之 9 篇):
問題
2
3
問題
5
34
問題
3
16
問題
3
7
問題
1
4
問題
1
2
問題
1
5
問題
0
18
文章代碼(AID): #1D_3CTnd (C_and_CPP)