在每个以逗号分隔的对象上执行成员函数

时间:2013-01-22 12:59:46

标签: c++ cimg

以下是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 个答案:

答案 0 :(得分:2)

CImg重载operator,,它返回一个CImgList对象,该对象是一个包含作为操作数给出的两个CImg对象的列表。该对象还会重载operator,以允许CImg个对象添加到列表中。

表达式(src,gray1,gray2)相当于((src,gray1),gray2)。内部括号(src,gray1)创建CImgList,然后(...,gray2)gray2附加到该列表,返回对同一列表的引用。 CImgList具有成员函数display

答案 1 :(得分:0)

说重载运算符,()必然意味着丑陋的设计是愚蠢的。 有很多有用且聪明的方法来重载此运算符,CImg完美地完成了它。您是否认为C ++标准会允许它,如果它总是像你说的那样'愚蠢'? 在这个例子中,C ++代码读得很好,它肯定比写作更简单(但相当于)     CImgList(SRC,灰色,GRAY2)。显示();

由于CImg是一个加速图像处理算法编写的库(主要用于原型设计),这种结构绝对有用。