作者developers (alpine skier)
看板C_and_CPP
標題Re: [問題] template一問
時間Sat Jun 18 13:09:47 2011
: 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