重载括号运算符

时间:2011-04-22 00:10:16

标签: c++

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

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

但是现在我正在尝试返回指针,我想这样做:

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

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

3 个答案:

答案 0 :(得分:6)

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

或者,或许更好:

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

(顺便说一句,你是否真的取消引用op()返回的对象,然后再将其取消引用再访问以访问Red?看起来很奇怪!)< / p>

答案 1 :(得分:3)

问题在于,在第二个示例中,image的类型为BMP*,而不是BMP;由于operator()上的BMP重载,您需要在使用调用运算符之前取消引用指针。

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

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

我现在远离编译器,所以如果我搞砸了你就不得不原谅我。

答案 2 :(得分:0)

请仔细阅读C++ FAQ #13.10。此FAQ项讨论了重载operator()以与矩阵一起使用。我相信这就是你想要做的。

FAQ还显示了如何使用运算符。