Re: [語法] 關於製做一個new的選單
看板C_and_CPP (C/C++)作者adrianshum (Alien)時間16年前 (2010/03/16 01:54)推噓7(7推 0噓 8→)留言15則, 9人參與討論串2/2 (看更多)
※ 引述《yan04870449 (楊伯)》之銘言:
: 假如現在有一個父類別 A 同時被多個子類別所繼承,如A_a, A_b, A_c等....
: 接著我想要讓A* 依照傳進來的引數不同new成不同的子類別。
: 大概像下面這個樣子
: Class A
: {
: enum Type { a,b,c };
: };
: Class A_a : public A
: {};
: Class A_b : public A
: {};
: void Create( A::Type i_eType )
: {
: switch( i_eType )
: {
: case a :
: A* = new A_a();
: break;
: case b :
: A* = new A_b();
: break;
: }
: }
: 我想到的方法就像上面一樣,用switch去做類似選單的功能,可是
: 如果今天擁有的子類別很多的話感覺做起來不是很好,想請問板上
: 前輩有沒有這類的手法可以分享給小弟學習。
有推文說沒法避免 switch 一段。
其實方法一定有,當然要視乎你的情況
決定合不合用。
比如加入 design pattern 裡的 prototype pattern:
(psuedo code)
class A {
public:
enum Type {a,b,c};
virtual A* Clone() = 0;
}
class AFactory {
private:
std::map<Type, A*> prototypeMap;
public:
AFactory() {
prototypeMap[a] = new A_a(.....);
prototypeMap[b] = new A_b(.....);
prototypeMap[c] = new A_c(.....);
}
A* CreateA( A::Type type} {
return prototypeMap[type]->Clone();
}
}
每個 child class 定義好自己的 clone logic,
這麼就不用一堆 switch-case。這種做法尤其
適合建立每種 child class 的方法都不同,又
很麻煩,child class 又會很常有增加的情況.
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 219.77.15.243
推
03/16 01:56, , 1F
03/16 01:56, 1F
推
03/16 02:23, , 2F
03/16 02:23, 2F
→
03/16 02:37, , 3F
03/16 02:37, 3F
推
03/16 05:51, , 4F
03/16 05:51, 4F
推
03/16 07:46, , 5F
03/16 07:46, 5F
推
03/16 10:11, , 6F
03/16 10:11, 6F
→
03/16 11:01, , 7F
03/16 11:01, 7F
→
03/16 11:02, , 8F
03/16 11:02, 8F
推
03/16 11:23, , 9F
03/16 11:23, 9F
→
03/16 11:27, , 10F
03/16 11:27, 10F
→
03/16 15:25, , 11F
03/16 15:25, 11F
→
03/16 15:26, , 12F
03/16 15:26, 12F
→
03/16 15:26, , 13F
03/16 15:26, 13F
→
03/16 15:27, , 14F
03/16 15:27, 14F
推
03/16 19:17, , 15F
03/16 19:17, 15F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章