[問題] 重載[][] 下標運算子(架構已定)

作者: hunandy14 (Charlott.HonG)   2016-11-03 18:05:49
程式碼連結:https://goo.gl/t7nEkR
class raw{
private:
unt x;
unt y;
unt len;
vector<uch> img;
}
可以做到
raw a(3, 3);
cout << a[n] << endl;
或是
a[n] = x;
剛好就讀取道 img 對應的位置沒問題
可是我如果想要用二維的方式讀取自己寫了
a.at2d(x, y);
如果圖是[3x3]
那麼 a.at2d(1, 0);
可以讀寫img[3]
現有結構有方法可以把
a.at2d(1, 0);
置換成
a[1][0]
又不影響
a[pos] 嗎?
作者: shadow0326 (非議)   2016-11-03 18:42:00
拉出class row,重載uch& row::operator []以及重載row& raw::operator[]啊我沒有看到不影響a[pos]的需求 唔可能可以再讓row能隱式轉換成uch 我覺得很醜就是了
作者: CoNsTaR ((const *))   2016-11-03 19:09:00
如果我理解沒錯的話 你想要用一樣的話做兩件不同的事 你覺得有辦法嗎…
作者: Caesar08 (Caesar)   2016-11-03 19:48:00
return一個別的class,支援conversion function與operator[]
作者: ilikekotomi (Young)   2016-11-03 22:56:00
凱薩大大講的可以看書 more effective C++裡面有個proxy class在講這件事情 我臨時找不到code
作者: CoNsTaR ((const *))   2016-11-03 23:17:00
咦…原Po的意思不是用[][]的時候把a當作二維,用[]的時候當作一維嗎?
作者: ilikekotomi (Young)   2016-11-03 23:19:00
http://ideone.com/eTTHNU 剛剛大概回想一下因為[][]沒辦法重載所以要分兩段不知道是不是會錯意沒看到沒看到又不影響a[pos]原PO講的情況用( )做會比較簡單 要不影響有我沒想到
作者: Caesar08 (Caesar)   2016-11-04 00:36:00
http://ideone.com/Tm4Bgk我覺得這不是好寫法。今天要是用3-d array,用一個[]與三個[],都能知道是甚麼意思。那如果用兩個[],請問是?用明確一點的function來存取會比你只用[]好
作者: ilikekotomi (Young)   2016-11-04 01:31:00
明天也來看一下 感謝凱薩大大示範
作者: Caesar08 (Caesar)   2016-11-04 11:19:00
是的。不過再額外提供operator=給assign value比較好
作者: ilikekotomi (Young)   2016-11-04 20:14:00
感謝凱薩大大的回覆 又學到了一課

Links booklink

Contact Us: admin [ a t ] ucptt.com