[問題] Design Pattern的應用

看板C_and_CPP作者 (累人啊....)時間14年前 (2011/11/04 15:41), 編輯推噓0(0056)
留言56則, 7人參與, 最新討論串1/2 (看更多)
程式碼如下,是典型的工廠方法 http://codepad.org/OwOf9fx8 也許這個例子用在這裡有點牽強...就當做我在練習嘛XD 想要實作的功能是這樣的,每個機台可分為多個模組 每個模組可能有數個軸(一軸X,兩軸XY...不固定) 例子上就是表示宣告了一個Module1,有1個X軸 如果我想做到可以很彈性的宣告該模組有多少軸,又是哪幾種軸 例如宣告可能是這樣(已實作好AxisY的類別) vector<string> AxisName; AxisName.push_back("X"); AxisName.push_back("Y"); Module Module1(AxisName); //這樣module1就有兩個軸了 Module1.AxisX.Run(30); //AxisX移動10格 Module1.AxisY.Run(10); 若要做到這樣子的功能,我該怎麼改呢? 主要是想說要怎麼寫,在宣告時才可以宣告成像藍色部份這樣的淺顯易懂 以上,再麻煩有經驗的大大分享,謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.251.174.137

11/04 16:08, , 1F
如果能接受Axis["X"].Run()這種會比較容易
11/04 16:08, 1F

11/04 16:08, , 2F
不然就要用MACRO了 個人很討厭那種東西....
11/04 16:08, 2F

11/04 16:13, , 3F
可以稍微說一下嗎,這部份我沒什麼概念...
11/04 16:13, 3F

11/04 16:20, , 4F
可以用enum
11/04 16:20, 4F

11/04 16:20, , 5F
一樓說的那部份
11/04 16:20, 5F

11/04 16:57, , 6F
沒有這樣寫過,不知道怎樣套用enum,可以寫一下宣告方式嗎
11/04 16:57, 6F

11/04 17:05, , 7F
版上找一enum就很多了
11/04 17:05, 7F

11/04 17:09, , 8F
想偷懶的話可以看看STL的map
11/04 17:09, 8F

11/04 21:25, , 9F
兩個問題 (1) 這個軸是執行時期決定的嗎? (2) 你知不知道
11/04 21:25, 9F

11/04 21:26, , 10F
Module1.AxisX.Run(30); 用中文翻出來是啥意思?
11/04 21:26, 10F

11/04 22:41, , 11F
1.是編譯期決定2.Module1的X軸移動10格(pps)
11/04 22:41, 11F

11/04 23:24, , 12F
輸入30移動10格 ... 嗯 ...
11/04 23:24, 12F

11/04 23:33, , 13F
30...看錯了
11/04 23:33, 13F

11/05 00:42, , 14F
這樣子的寫法是Model裡內含3個物件, 各自做移動互不相關
11/05 00:42, 14F

11/05 00:43, , 15F
^Module
11/05 00:43, 15F

11/05 00:46, , 16F
method(verb)有分主動或被動, 主詞/受詞都是小數點左邊的物
11/05 00:46, 16F

11/05 00:47, , 17F
件, A.B 這樣的寫法是 A擁有B(通常)或A關連B, 從文字敘述來
11/05 00:47, 17F

11/05 00:48, , 18F
看是 Module 沿某軸方向做移動, 不是軸本身做移動
11/05 00:48, 18F

11/05 01:20, , 19F
.....不懂....
11/05 01:20, 19F

11/05 01:55, , 20F
我覺得 p 大說得蠻清楚的. Module1.AxisX.Run(30); -->
11/05 01:55, 20F

11/05 01:56, , 21F
物件 Module1 沿著(.) AxisX 移動(.Run) 10 格
11/05 01:56, 21F

11/05 02:16, , 22F
你的程式要控制robot hand的嗎? 好熟的字眼...
11/05 02:16, 22F

11/05 02:44, , 23F
我覺得不如解釋成"Module1的X軸要移動30格"比較像我要的
11/05 02:44, 23F

11/05 02:45, , 24F
不太算機械手臂,某方面算類似啦,主要是想知道要作到像
11/05 02:45, 24F

11/05 02:45, , 25F
這樣的宣告,背後的程式到現在還是沒什麼sense...@@
11/05 02:45, 25F

11/05 04:05, , 26F
11/05 04:05, 26F

11/05 04:29, , 27F
簡單來說要完成你的語法, 還要考慮狀態應該放在哪一個類別
11/05 04:29, 27F

11/05 04:30, , 28F
, 既然是對AxisX呼叫操作Run, 看來會直接變更到AxisX的屬性
11/05 04:30, 28F

11/05 04:32, , 29F
, 但看起來該屬性又歸Module所有, 如果是後者那麼AxisX扮演
11/05 04:32, 29F

11/05 04:34, , 30F
的是Accessor的角色, 這樣會指標會亂指, 又因為你把存取子
11/05 04:34, 30F

11/05 04:35, , 31F
暴露出來, 暗地裡資料交換手法會很骯髒
11/05 04:35, 31F

11/05 09:42, , 32F
g++的stl已經有map那些標準了,怎麼還是用boost的?
11/05 09:42, 32F

11/05 14:35, , 33F
因為網站gcc編不過這隻程式, 雖然為了趕流行還是加上auto
11/05 14:35, 33F

11/05 15:16, , 34F
所以說如果stl已經有包含的,就用stl的也ok摟?
11/05 15:16, 34F

11/05 16:12, , 35F
不過stl的map是執行時期去做搜尋, 就算unordered_map遇上碰
11/05 16:12, 35F

11/05 16:13, , 36F
撞也是很慘, Boost.MPL 裡的容器大部分都是 constant time
11/05 16:13, 36F

11/05 16:14, , 37F
存取時間, 且是在編譯的時候執行, 所以上面的程式碼跟一般
11/05 16:14, 37F

11/05 16:14, , 38F
陣列存取一樣快
11/05 16:14, 38F

11/05 16:16, , 39F
已經是對型態做操作而不是對物件做操作了
11/05 16:16, 39F

11/05 17:19, , 40F
有時候boost的會比stl的還好?不知道stl跟boost的
11/05 17:19, 40F

11/05 17:19, , 41F
有什麼差別,請問有沒有相關網頁可以參考呢?
11/05 17:19, 41F

11/05 17:25, , 42F
不同面相的東西 http://bit.ly/up7JcC
11/05 17:25, 42F

11/05 17:46, , 43F
剛剛稍微查了一下,寫個小程式測試...這太誇張了=
11/05 17:46, 43F

11/05 18:07, , 44F
這個只能用在編譯時期就已經決定資料?
11/05 18:07, 44F

11/05 18:07, , 45F
既然只能在編譯時期就要決定好的,那怎麼能拿來用呢
11/05 18:07, 45F

11/05 19:19, , 46F
還是說這個是用來實現建表的?
11/05 19:19, 46F

11/05 22:25, , 47F
歹勢...這就我想到要試的東西,在練習嘛XD,套用到工作上
11/05 22:25, 47F

11/05 22:25, , 48F
可能看起來會簡潔一點,所以在試...
11/05 22:25, 48F

11/05 22:26, , 49F
poyenc大你寫的那個對我來說有難度喔,我要研究一下
11/05 22:26, 49F

11/05 22:27, , 50F
可能過陣子會mail跟你請教一下,如果你有空,要麻煩你一下^^
11/05 22:27, 50F

11/06 00:29, , 51F
有些東西能用靜態多型就拉到編譯時期做掉, 不過還是要先評
11/06 00:29, 51F

11/06 00:30, , 52F
估這樣做是不是真的有帶來好處, 除了這個也可以看看另一個
11/06 00:30, 52F

11/06 00:31, , 53F
函式庫 Boost.Spirit, 這個例子對我來說這樣寫還比較容易些
11/06 00:31, 53F

11/06 01:36, , 54F
感謝!最近在看stl翻譯的那本,可能要花點時間來看
11/06 01:36, 54F

11/06 01:36, , 55F
boost了,請問boost有書本在講嗎?還是看他網站的?
11/06 01:36, 55F

11/06 01:52, , 56F
http://amzn.to/vxRclv 花點時間看doc跟source code實在
11/06 01:52, 56F
文章代碼(AID): #1EivSHsz (C_and_CPP)
文章代碼(AID): #1EivSHsz (C_and_CPP)