重载括号操作符

Overloaded parenthesis operator

本文关键字:操作符 重载      更新时间:2023-10-16

我正在使用EasyBMP库。我有一个返回BMP*对象的函数。BMP对象重载了括号,我可以这样做:

BMP image;
*image(x,y)->Red=0;

但是现在我想返回一个指针,我想做:

BMP *image;
*image(x,y)->Red=0;

,但我得到一个错误,说图像不能用作一个函数。我该如何解决这个问题?

BMP* image = getimageptr();
*(*image)(x,y)->Red=0;

或者,也许更好:

BMP* image_ptr = getimageptr();
BMP& image = *image_ptr;
*image(x,y)->Red=0;

(顺便说一句,你真的再次访问Red之前取消对op()返回的对象的引用吗?似乎很奇怪!)

问题是,在第二个例子中,image的类型是BMP*,而不是BMP;由于operator()BMP上重载,因此在使用调用操作符之前需要对指针解引用。

因此,我认为你需要使用:

*(*image)(x,y)->Red = 0;

我现在离编译器很远,所以如果我搞砸了,你必须原谅我。

请通读c++ FAQ #13.10。这个FAQ项目讨论了重载operator()以用于矩阵。我相信这是你想做的。

FAQ还显示了如何使用操作符