【发布时间】:2010-07-16 15:06:53
【问题描述】:
所以我在我正在编写的程序中使用来自 opencv 的 Mat 类。 Mat 看起来像这样:
class Mat {
public:
Mat(int width, int height, int type);
template <typename T> T getElt(int x, int y);
int depth();
...
}
构造函数中的类型指定Mat中的元素是否为floats、ints等以及图像中的通道数。 depth() 返回用于存储图像元素的数据类型。
不幸的是,我必须在我的代码中调用 getElt()。每当我这样做时,我都会使用switch 语句来检查Mat 的深度,这样我就可以使用适当的模板参数调用getElt()。这样做非常冗长,所以我想知道是否有更好的方法来做到这一点。我可以为Mat 创建一个容器并使用模板魔术创建一个返回类型而不是值的方法吗?或者我可以使用宏来使事情更高效和合乎逻辑吗?
我宁愿不必子类化 Mat,因为除了 getElt() 之外还有几种方法我有同样的问题。
编辑:使描述更准确。
【问题讨论】:
-
如果你用“错误”的模板参数调用它会发生什么?你得到垃圾还是结果被转换为请求的类型?如果是后者,你可以一直使用双精度类型吗?
-
那行不通:文档说类型必须与实际的矩阵类型匹配。
标签: c++ templates macros types opencv