我有一个模板类Array,它实现了一个二维数组。数组类包含一个重载的operator(),它返回对从零开始的位置(列x,行y)的元素的引用:
const T & operator () (int x, int y) const {
size_t loc = y*width + x;
return *(buffer + loc);
}
我还有一个派生类图像,它表示ppm图像的通用数据容器。图像类包含一个setPixel方法,用于设置(x,y)像素的RGB值:
void setPixel(unsigned int x, unsigned int y) {
size_t locpixel = y*width + x;
size_t componentofpixel = locpixel * 3;
(x, y) = 0;
(x, y) + 1 = 1;
(x, y) + 2 = 0;
}
因此,当我编译它时,在setPixel中显示一个错误,表达式必须是可修改的lValue。有没有办法在我的setPixel方法中使用operator()来获取数组中的下一个元素?
答案 0 :(得分:0)
与成员函数不同,运算符需要有一个实例才能使用。现在当你执行(x, y)
时,你调用逗号运算符,编译器计算表达式x
,丢弃它,然后计算表达式y
并返回产生的结果。该返回值是一个临时值,您无法分配它,因为它是一个内置的int类型。
为了调用函数调用操作符,你需要给它一个实例来调用它。在这种情况下,您可以使用
(*this)(x, y) = 0;
(*this)(x, y) + 1 = 1;
(*this)(x, y) + 2 = 0;
现在解决了调用您为类型定义的operator()
。