2011-04-22 72 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還顯示瞭如何使用操作員。