精華區beta Programming 關於我們 聯絡資訊
※ 引述《JeffHung.bbs@ptt.cc (御風只配做笨木頭)》之銘言: > 我個人覺得 overload operator() 對這個例子來說,不太恰當。 > 因為 overload operator() 後,其「長相」就會很像 functor, > 但一般 functor 是 stateless 的,而在 2D array 的使用上, > 其行為卻不是 stateless,反而大大有關。因此,overload > operator() 反而會容易讓使用者迷惑。 > : 至於 .at(x, y) 的功能一般是做成會 check boundary 的版本。 > 用 .element(x, y) 或 .get(x, y) 也都可以啦,這也跟上面一樣, > 是 naming convension 的 issue。 其實我另一個考量因素就在這裡, 如果說一般的版本是 [x][y] 這樣 access, 但是 check boundary 的版本卻是 .at(x, y), 這樣某些 user 反而會覺得奇怪, 而這種不對稱感比起誤認該 class 為 functor 來說, 有些人是覺得前者比較嚴重, 有些人是覺得後者比較嚴重。 支持前者較為嚴重的立場就像我取決於視覺, 支持後者較為嚴重的立場, 則是因為前者的問題可以在 compile-time 抓到, 但後者被誤用可能就算到了 runtime 還不見得抓得到, 從純工程角度來看, 確實使用 [x][y] 是較佳的。 有一個比較合理的技巧是, check boundary 的版本同樣做成 .at(x).at(y) 這樣, 因為大家都用慣了 vector, 寫起來也比較不會奇怪。 -- Name: Tseng, Ling-hua E-mail Address: uranus@it.muds.net School: National Tsing Hua University Department: Computer Science Interesting: C++, Compiler, PL/PD, OS, VM, Large-scale software design Researching: Software pipelining for VLIW architectures Homepage: https://it.muds.net/~uranus -- ╔═══╗ ┼────────────────────────╮ 狂狷 Origin:[ 狂 狷 年 少 ] whshs.cs.nccu.edu.tw ╰─╮ 年少 ┼╮ < IP:140.119.164.252 > ╰─╮ ╚╦═╦╝ From:61-230-217-190.dynamic.hinet.net ─╨─╨─ KGBBS 遨翔"BBS"的狂狷不馴;屬於年少的輕狂色彩 [修改]tinlans:61-230-217-190.dynamic.hinet.net 07/01/04 20:55:07