【发布时间】:2015-07-02 14:05:38
【问题描述】:
我有一个现有的课程,其结构如下:
class Matrix
{
public:
float Data[4][4];
// ... methods
};
并随后用于以下方式:
Matrix m;
m.Data[0][0] = 1.0f;
float local = m.Data[0][0];
//...
我想用重载的索引运算符替换Data 成员,这样我就可以对使用的索引执行范围检查。虽然我可以更改 Matrix 类本身及其成员函数的实现,但我无法修改其在现有代码中的用法,因此任何解决方案都要求用法语法保持相同。还希望解决方案不会改变sizeof(Matrix)。有没有办法做到这一点?
【问题讨论】:
-
你需要多级间接,每个类只能重载一个索引运算符。
-
是的,我明白 - 但是,由于已知它是一个二维数组,Matrix 的索引运算符可以返回某种接口,它也可以覆盖它的索引运算符? ...如果实际上可能的话,不确定它的结构。
-
顺便说一句,您希望如何实际存储数据?如果每一行在内存中仍然是连续的,你可以重载一个
operator[]来返回float*---行开始的地址---第二个[]会被自动处理。 -
@Petr 问题是第二个索引的范围检查。
-
我不确定您要的是什么,您希望它以完全相同的方式使用:
m.Data[][],而Data将是一个带有operator[]重载的结构?如果有,有什么用?
标签: c++ arrays operator-overloading