2013-01-22 53 views
4

這裏上執行的成員函數從full listing相關代碼:每個逗號分隔的對象

#include "CImg.h" 
using namespace cimg_library; 

int main() { 
    CImg<unsigned char> src("Tulips.jpg"); 
    int width = src.width(); 
    int height = src.height(); 
    int depth = src.depth(); 

    //New grayscale images. 
    CImg<unsigned char> gray1(width,height,depth,1); 
    CImg<unsigned char> gray2(width,height,depth,1); 

    // ... 

    (src,gray1,gray2).display("RGB to Grayscale"); 
} 

如何行(src,gray1,gray2).display("RGB to Grayscale");工作?如何將display成員函數應用於逗號分隔列表中的每個對象?

回答

2

CImg重載operator,它返回一個CImgList對象,它是含有給定作爲操作數兩個CImg對象的列表。該對象也會重載operator,以允許將CImg對象添加到列表中。

表達式(src,gray1,gray2)相當於((src,gray1),gray2)。內部圓括號(src,gray1)創建CImgList,然後(...,gray2)gray2附加到該列表,並返回對同一列表的引用。 CImgList具有成員函數display

+0

對於什麼看起來非常醜陋的設計很好的解釋。重載'運算符',像這樣對我來說似乎是純粹的迷惑。 –

+0

謝謝,很好解釋 –

0

說重載操作符,()必然意味着一個醜陋的設計是愚蠢的。 有很多有用的和聰明的方法來重載這個操作符,CImg很好地完成它。你認爲如果你說的話總是「愚蠢的」,那麼C++標準會允許它? 在這個例子中,C++代碼讀得非常好,它絕對比編寫 CImgList(src,gray1,gray2).display();

由於CImg是一個加速圖像處理算法(主要用於原型製作)的書寫庫,這種結構絕對有用。