作者NIKE74731 (做遊戲的心)
看板C_and_CPP
標題[問題] template一問
時間Fri Jun 17 16:36:39 2011
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
VC++
問題(Question):
請問各位
現在小弟遇到一個問題
請看以下
class Base
{
public: virtual void Run() = 0;
};
class D1 : public Base
{
public: void Run() { std::cout << "Run D1"; }
};
class D2 : public Base
{
public: void Run() { std::cout << "Run D2"; }
};
class D3 : public Base
{
public: void Run() { std::cout << "Run D3"; }
};
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()做調整
請問有沒有什麼方法可以解決這種問題?
小弟有想到要用template的方式做
template< class T >
class DerivedCreator
{
public:
Base* Get()
{
return &m_DerivedObj;
}
T m_DerivedObj;
};
但原本的Base* Get(int iType)又該怎麼寫呢?
Base* Get( int iType )
{
// ????????????????????????
}
template的type有辦法在runtime中當做參數傳進去嗎?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.124.99.126
→ james732:我想到的是用工廠模式來寫,至少不用改 Get... 06/17 16:41
→ angleevil:我也認同james732所說,就算Base* Get( int iType ) 06/17 17:22
→ angleevil:可以依據你的推測去執行(搞不懂最後一句作用,因此不解 06/17 17:29
→ angleevil:讀),根據iType字眼,勢必還是要借助switch判斷. 06/17 17:30
→ angleevil:以下方法可以參考看看 06/17 17:36
→ angleevil:template< class T > 06/17 17:36
→ angleevil:Base* Get( T tClass ) 06/17 17:36
→ angleevil:{ 06/17 17:37
→ angleevil:return &tClass; 06/17 17:37
→ angleevil:} 06/17 17:37
→ angleevil:直接把D3 產生的物件當參數丟入Get應該就可以 06/17 17:39
→ angleevil:ps:T tClass改成T &tClass,不過這想法應該有很多問題 06/17 17:40
※ 編輯: NIKE74731 來自: 59.124.99.126 (06/17 18:07)
→ loveme00835:Clone() + 陣列(連續) or map(不連續) 06/17 18:11
→ angleevil:不怎麼保險呢 06/18 13:45
→ loveme00835:= = 06/18 15:02