我敢肯定答案是“你不能使用模板,你必须使用虚拟函数(动态多态)”,但它好像我必须复制大量的代码如果我走了那条路。这里是设置:“运行时间模板”
我目前有两个类,ColorImageSegmentation和GrayscaleImageSegmentation。他们做的事情本质上是一样的,但有三个不同点 - 它们在不同类型(ColorImage和GrayscaleImage)上运行 - 参数,直方图的维度(3 vs 1)不同 - PixelDifference函数根据图像类型
如果我创建一个类
template <TImageType>
class ImageSegmentation
{
};
我会在良好的状态。不过,我想有这样的对象作为另一个类的成员:
class MyMainClass
{
ImageSegmentation MyImageSegmentation;
};
但用户需要确定的MyImageSegmentation
类型(如果用户打开一个灰度图像,我想要实例MyImageSegmentation<GrayScaleType>
同样的。 。彩色图像,MyImageSegmentation<ColorType>
)
随着派生类,我可以存储一个指针,然后做:
class MyMainClass
{
ImageSegmentation* MyImageSegmentation;
};
... user does something...
MyImageSegmentation = new ColorImageSegmentation;
,但我怎么会做这样的事情有模板?问题是我有很多的:
typedef TImageType::HistogramType HistogramType;
typedef TImageType::PixelType PixelType;
样的东西怎么回事,所以我不知道我将如何将它们转换为动态多态模型,而不会复制一大堆的代码。
对不起漫不经心......有人对我有什么建议吗?
感谢,
大卫
请编辑该问题以正确格式化代码示例。 – chris 2010-11-20 15:23:18
Boost的GIL(http://www.boost.org/doc/libs/1_45_0/libs/gil/doc/index.html)也做同样的事情。你可以检查他们是如何解决这个问题的。 – liori 2010-11-20 17:36:00