[問題] template一問

看板C_and_CPP作者 (做遊戲的心)時間14年前 (2011/06/17 08:36), 編輯推噓0(0018)
留言18則, 3人參與, 最新討論串1/9 (看更多)
開發平台(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

06/17 16:41, , 1F
我想到的是用工廠模式來寫,至少不用改 Get...
06/17 16:41, 1F

06/17 17:22, , 2F
我也認同james732所說,就算Base* Get( int iType )
06/17 17:22, 2F

06/17 17:29, , 3F
可以依據你的推測去執行(搞不懂最後一句作用,因此不解
06/17 17:29, 3F

06/17 17:30, , 4F
讀),根據iType字眼,勢必還是要借助switch判斷.
06/17 17:30, 4F

06/17 17:35, , 5F
根據Function template(http://0rz.tw/lxUjz)
06/17 17:35, 5F

06/17 17:36, , 6F
以下方法可以參考看看
06/17 17:36, 6F

06/17 17:36, , 7F
template< class T >
06/17 17:36, 7F

06/17 17:36, , 8F
Base* Get( T tClass )
06/17 17:36, 8F

06/17 17:37, , 9F
{
06/17 17:37, 9F

06/17 17:37, , 10F
return &tClass;
06/17 17:37, 10F

06/17 17:37, , 11F
}
06/17 17:37, 11F

06/17 17:39, , 12F
直接把D3 產生的物件當參數丟入Get應該就可以
06/17 17:39, 12F

06/17 17:40, , 13F
ps:T tClass改成T &tClass,不過這想法應該有很多問題
06/17 17:40, 13F

06/17 17:42, , 14F
所以工廠模式參考看看吧,http://0rz.tw/hy9SD
06/17 17:42, 14F
※ 編輯: NIKE74731 來自: 59.124.99.126 (06/17 18:07)

06/17 18:11, , 15F
Clone() + 陣列(連續) or map(不連續)
06/17 18:11, 15F

06/18 13:45, , 16F
查了一下c++的http://0rz.tw/D2iVa ,版主,此方法好像
06/18 13:45, 16F

06/18 13:45, , 17F
不怎麼保險呢
06/18 13:45, 17F

06/18 15:02, , 18F
= =
06/18 15:02, 18F
文章代碼(AID): #1D-n8Uwf (C_and_CPP)
討論串 (同標題文章)
以下文章回應了本文 (最舊先):
問題
1
2
問題
1
5
完整討論串 (本文為第 1 之 9 篇):
問題
2
3
問題
5
34
問題
3
16
問題
3
7
問題
1
4
問題
1
2
問題
1
5
問題
0
18
文章代碼(AID): #1D-n8Uwf (C_and_CPP)