Image<unsigned>
画像を配列として保存し、またはなどの要素のタイプに基づいてテンプレート化していますImage<float>
。多くの場合、これらの画像に対して操作を実行する必要があります。たとえば、2つの画像を追加したり、画像を(要素ごとに)正方形にしたりする必要がある場合があります。すべての操作は要素ごとです。私は次のようなことを書くことにできるだけ近づきたいです:
float Add(float a, float b) { return a+b; }
Image<float> result = Add(img1, img2);
そしてさらに良いことに、
complex ComplexCombine(float a, float b) { return complex(a, b); }
Image<complex> result = ComplexCombine(img1, img2);
また
struct FindMax {
unsigned currentMax;
FindMax(): currentMax(0) {}
void operator(unsigned a) { if(a > currentMax) currentMax = a; }
};
FindMax findMax;
findMax(img);
findMax.currentMax; // now contains the maximum value of 'img'
今、私は明らかにそれを正確に行うことはできません。私は私が呼ぶことができるように何かを書いた:
Image<float> result = Apply(img1, img2, Add);
しかし、渡された関数/関数オブジェクトの戻り型を検出するための一般的な方法を理解できないようです。そのため、ComplexCombine
上記の例は出ています。また、渡したい引数の数ごとに新しいものを作成する必要があります(これは避けられないようです)。
これを実現する方法について何か考えはありますか(ボイラープレートコードをできるだけ少なくして)?