2011-04-22 57 views
0

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

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

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

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

,但我得到一个错误,指出图像不能用作功能。我该如何解决?

+1

顺便说一句,它被称为函数调用操作符。 – 2011-04-22 00:12:31

+3

多么可憎的语法。 – shoosh 2011-04-22 00:32:02

+0

@shoosh甜蜜的耶稣,你是对的! – 2011-04-22 00:33:50

回答

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

,或者更好:

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

(顺便说一句,你真的提领提领它再次访问Red之前op()返回的对象似乎很奇怪?!)

+2

是的,很好地使用参考。 – 2011-04-22 00:15:07

+0

@Jonathan:谢谢! – 2011-04-22 00:17:29

3

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

因此,我想你会需要使用:

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

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

+1

+1你没有搞砸:) – 2011-04-22 00:15:55

+0

我认为它最终成为(* image)(x,y).. – Snowman 2011-04-22 00:18:07

+1

@bitmoe:你为什么这么认为? – 2011-04-22 00:22:45

0

请通读C++ FAQ #13.10。这个常见问题项目讨论了超载operator()与矩阵一起使用。我相信这是你想要做的。

FAQ还显示了如何使用操作员。