【发布时间】:2009-02-26 02:54:51
【问题描述】:
我将图像存储为数组,根据元素的类型进行模板化,例如Image<unsigned> 或Image<float> 等。我经常需要对这些图像执行操作;例如,我可能需要添加两个图像,或者将图像平方(按元素),等等。所有的操作都是元素级的。我想尽可能地写出类似的东西:
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 示例已失效;另外,我必须为我想传递的每个参数写一个新的(这似乎是不可避免的)。
对如何实现这一点有任何想法(尽可能少的样板代码)?
【问题讨论】: