看板 C_and_CPP 關於我們 聯絡資訊
程式碼如下,是典型的工廠方法 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
azureblaze:如果能接受Axis["X"].Run()這種會比較容易 11/04 16:08
azureblaze:不然就要用MACRO了 個人很討厭那種東西.... 11/04 16:08
tyc5116:可以稍微說一下嗎,這部份我沒什麼概念... 11/04 16:13
diabloevagto:可以用enum 11/04 16:20
diabloevagto:一樓說的那部份 11/04 16:20
tyc5116:沒有這樣寫過,不知道怎樣套用enum,可以寫一下宣告方式嗎 11/04 16:57
diabloevagto:版上找一enum就很多了 11/04 17:05
azureblaze:想偷懶的話可以看看STL的map 11/04 17:09
poyenc:兩個問題 (1) 這個軸是執行時期決定的嗎? (2) 你知不知道 11/04 21:25
poyenc:Module1.AxisX.Run(30); 用中文翻出來是啥意思? 11/04 21:26
tyc5116:1.是編譯期決定2.Module1的X軸移動10格(pps) 11/04 22:41
legnaleurc:輸入30移動10格 ... 嗯 ... 11/04 23:24
tyc5116:30...看錯了 11/04 23:33
poyenc:這樣子的寫法是Model裡內含3個物件, 各自做移動互不相關 11/05 00:42
poyenc: ^Module 11/05 00:43
poyenc:method(verb)有分主動或被動, 主詞/受詞都是小數點左邊的物 11/05 00:46
poyenc:件, A.B 這樣的寫法是 A擁有B(通常)或A關連B, 從文字敘述來 11/05 00:47
poyenc:看是 Module 沿某軸方向做移動, 不是軸本身做移動 11/05 00:48
tyc5116:.....不懂.... 11/05 01:20
tropical72:我覺得 p 大說得蠻清楚的. Module1.AxisX.Run(30); --> 11/05 01:55
tropical72:物件 Module1 沿著(.) AxisX 移動(.Run) 10 格 11/05 01:56
tomnelson:你的程式要控制robot hand的嗎? 好熟的字眼... 11/05 02:16
tyc5116:我覺得不如解釋成"Module1的X軸要移動30格"比較像我要的 11/05 02:44
tyc5116:不太算機械手臂,某方面算類似啦,主要是想知道要作到像 11/05 02:45
tyc5116:這樣的宣告,背後的程式到現在還是沒什麼sense...@@ 11/05 02:45
poyenc:http://bit.ly/tGuqxN 11/05 04:05
poyenc:簡單來說要完成你的語法, 還要考慮狀態應該放在哪一個類別 11/05 04:29
poyenc:, 既然是對AxisX呼叫操作Run, 看來會直接變更到AxisX的屬性 11/05 04:30
poyenc:, 但看起來該屬性又歸Module所有, 如果是後者那麼AxisX扮演 11/05 04:32
poyenc:的是Accessor的角色, 這樣會指標會亂指, 又因為你把存取子 11/05 04:34
poyenc:暴露出來, 暗地裡資料交換手法會很骯髒 11/05 04:35
diabloevagto:g++的stl已經有map那些標準了,怎麼還是用boost的? 11/05 09:42
poyenc:因為網站gcc編不過這隻程式, 雖然為了趕流行還是加上auto 11/05 14:35
diabloevagto:所以說如果stl已經有包含的,就用stl的也ok摟? 11/05 15:16
poyenc:不過stl的map是執行時期去做搜尋, 就算unordered_map遇上碰 11/05 16:12
poyenc:撞也是很慘, Boost.MPL 裡的容器大部分都是 constant time 11/05 16:13
poyenc:存取時間, 且是在編譯的時候執行, 所以上面的程式碼跟一般 11/05 16:14
poyenc:陣列存取一樣快 11/05 16:14
poyenc:已經是對型態做操作而不是對物件做操作了 11/05 16:16
diabloevagto:有時候boost的會比stl的還好?不知道stl跟boost的 11/05 17:19
diabloevagto:有什麼差別,請問有沒有相關網頁可以參考呢? 11/05 17:19
poyenc:不同面相的東西 http://bit.ly/up7JcC 11/05 17:25
diabloevagto:剛剛稍微查了一下,寫個小程式測試...這太誇張了= 11/05 17:46
diabloevagto:這個只能用在編譯時期就已經決定資料? 11/05 18:07
diabloevagto:既然只能在編譯時期就要決定好的,那怎麼能拿來用呢 11/05 18:07
diabloevagto:還是說這個是用來實現建表的? 11/05 19:19
tyc5116:歹勢...這就我想到要試的東西,在練習嘛XD,套用到工作上 11/05 22:25
tyc5116:可能看起來會簡潔一點,所以在試... 11/05 22:25
tyc5116:poyenc大你寫的那個對我來說有難度喔,我要研究一下 11/05 22:26
tyc5116:可能過陣子會mail跟你請教一下,如果你有空,要麻煩你一下^^ 11/05 22:27
poyenc:有些東西能用靜態多型就拉到編譯時期做掉, 不過還是要先評 11/06 00:29
poyenc:估這樣做是不是真的有帶來好處, 除了這個也可以看看另一個 11/06 00:30
poyenc:函式庫 Boost.Spirit, 這個例子對我來說這樣寫還比較容易些 11/06 00:31
diabloevagto:感謝!最近在看stl翻譯的那本,可能要花點時間來看 11/06 01:36
diabloevagto:boost了,請問boost有書本在講嗎?還是看他網站的? 11/06 01:36
poyenc:http://amzn.to/vxRclv 花點時間看doc跟source code實在 11/06 01:52