[问题] 重载[][] 下标运算子(架构已定)

楼主: 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