看板 EE_DSnP 關於我們 聯絡資訊
※ 引述《ysho ()》之銘言: : 標題: [問題] 關於 CmdParser::regCmd : 時間: Wed Apr 8 10:53:47 2009 : : 想請問一下 : : 在 CmdParser::regCmd 的 TODO 中提到 : : insert (mandCmd, e) to _cmdMap; return false if insertion fails. : : 問題是,僅僅 insert (mandCmd, e) to _cmdMap 這個動作基本上不會失敗 : : 那還有什麼情況下會導致 insertion fail 而需要 return false 呢? : : -- : ※ 發信站: 批踢踢實業坊(ptt.cc) : ◆ From: 140.112.4.234 : 推 timrau:insert有可能失敗啊,已經出現過,或是out-of-mem都會失敗 04/08 11:06 : → timrau:當然寫個command interface是不太容易寫到out-of-mem啦.... 04/08 11:07 : → ysho:所以如果mandCmd已在_cmdMap中,是要覆蓋還是return false? 04/08 11:33 : → ilway25:原po是神 04/08 12:28 : 推 ric2k1:不要覆蓋 & return false. Behavior 跟 map 的 insert 一樣 04/08 16:18 : → ysho:了解. 謝謝老師和學長! 04/08 17:59 這兒提到如果mandCmd已在_cmdMap中 則return false 也就是說 註冊了以下東西後 cmdMgr->regCmd("HIStory", 3, new HistoryCmd); cmdMgr->regCmd("HELp", 3, new HelpCmd); .......... 便會在 _cmdMap 存下 HIS --link to-- 一個 HistoryCmd 物件 HEL --link to-- 一個 HelpCmd 物件 此時若再註冊 cmdMgr->regCmd("HISxxx", 3, new xxxCmd); 則因為 HIS 已存於 _cmdMap 所以應該不要覆蓋 & return false 我的問題是 若 註冊 cmdMgr->regCmd("HISTOry", 5, new xxxCmd); 要註冊的是 HISTO 啊 但在 _cmdMap 並沒有 HISTO 只有 HIS 可是若執行 mcalc> hist 或是 mcalc> histo mcalc> history 有些就不知道要呼叫 HistoryCmd物件 還是 xxxCmd物件了 所以這種情況 要不要 return false呢? 因為這還牽涉到 optCmd 有沒有一樣的問題 好像不怎麼容易寫 所以來請教老師 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.252.220
ric2k1:啊, 你抓到 bug 了... 這的確是 cmdReg() 目前沒有考慮到的 04/09 16:50
ric2k1:地方. 如果 HIStory 與 HISTOry 同時被 register 的話, 04/09 16:51
ric2k1:會有 error 產生, 而且都會被 insert 到 map 裡, 但是如果 04/09 16:51
ric2k1:下 hist, histo, 或是 his commands, 將只有 HIStory 會 04/09 16:53
ric2k1:反應.... 目前先不要管這種狀況好了, 就假設 cmdReg 不會有 04/09 16:54
ric2k1:這種情況發生. 04/09 16:54
goodword:了解了 謝謝老師! 04/09 17:49