4

完全なリストからの関連コードは次のとおりです。

#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メンバー関数は、コンマ区切りリスト内の各オブジェクトにどのように適用されますか?

4

2 に答える 2

2

CImgオペランドとして指定された 2 つのオブジェクトを含むリストでoperator,あるオブジェクトを返すオーバーロード。そのオブジェクトもオーバーロードして、オブジェクトをリストに追加できるようにします。CImgListCImgoperator,CImg

(src,gray1,gray2)は と同等((src,gray1),gray2)です。括弧の内側のセット は を(src,gray1)作成しCImgList、そのリストに(...,gray2)追加gray2して、同じリストへの参照を返します。CImgListメンバー関数を持っていますdisplay

于 2013-01-22T13:06:17.377 に答える
0

operator,() をオーバーロードすることは、醜い設計がばかげていることを意味します。この演算子をオーバーロードするための便利で巧妙な方法がたくさんありますが、CImg はそれを完璧に実行します。あなたが言うように、それが常に「ばかげている」場合、C++標準がそれを許可すると思いますか? この例では、C++ コードは非常によく読み取れます。CImgList(src,gray1,gray2).display(); を記述するよりも明らかに単純です (ただし同等です)。

CImg は画像処理アルゴリズム (主にプロトタイピングに使用) の作成を高速化するためのライブラリなので、このような構成は非常に便利です。

于 2013-01-22T17:56:04.323 に答える