※ 引述《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