※ 引述《JeffHung (御風只配做笨木頭)》之銘言:
: ※ 引述《tinlans.bbs@whshs.cs.nccu.edu.tw (汀)》之銘言:
: : 其實我看過的較佳實作方式,
: : 是去 overload operator(),
: : 也就是 T &operator()(size_t x, size_t y);
: : 這樣就能直接以 (x, y) 存取內容,
: 我個人覺得 overload operator() 對這個例子來說,不太恰當。
: 因為 overload operator() 後,其「長相」就會很像 functor,
: 但一般 functor 是 stateless 的,而在 2D array 的使用上,
: 其行為卻不是 stateless,反而大大有關。因此,overload
: operator() 反而會容易讓使用者迷惑。
同意,operator() 的使用如果不是用在 func call 上,
有時候會產生令人迷惑的感覺。這時候我就會想,需要省那幾個字嗎?
最直覺的做法當然是 operator[](size_t, size_t), 問題是這在 C++ 下
是做不到的。實作 proxy 再用 [][] 去 call 感覺很順,但做起來之麻煩…
另一種方式的話,我是在想可以把參數包起來,變成像這樣:
operator[](Position)
實際上用時就:
T t;
t[pos(12, 34)];
另外沒記錯的話,D 語言可以用 [12,34] 而不會被判斷成使用 operator,
: : 至於 .at(x, y) 的功能一般是做成會 check boundary 的版本。
: 用 .element(x, y) 或 .get(x, y) 也都可以啦,這也跟上面一樣,
: 是 naming convension 的 issue。
element 感覺太長了,at 確實有 check boundary 的感覺
也許 get 是比較好的選擇,雖然我不太喜歡 XD
--
Nobody can take anything away from him.
Nor can anyone give anything to him.
What came from the sea,
has returned to the sea.
Chrono Cross
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.216.24.186