0

我想创建一个图像模板类。该类将从文件中读取图像数据并将数据存储在其成员变量中。图像的数据类型存储在图像的标题中,事先不知道。

如何在不知道图像数据类型的情况下创建图像模板类?图像读取函数将读取标头并根据数据的数据类型分配该内存。

谢谢

4

2 回答 2

4

模板不会做太多的自动化。模板允许您延迟处理(某些)类型的特定细节,直到编译时而不是在编写代码时 - 但是在编译代码时,必须知道用作模板参数的类型和值的所有细节. 它们特别处理直到运行时才知道的类型变化,就像您在此处处理的那样。

您正在讨论的内容听起来更适合经典的 OOP 模型,具有基本的“图像”类,以及每种图像类型的派生类(例如,BmpImage、JpegImage、TiffImage 等)然后你'会有某种 ImageFactory 类,它读取数据,实例化从 Image 派生的某种类型的对象,最后返回一个Image *新定义的对象,以便客户端代码可以根据需要显示、操作等图像.

显而易见的替代方案(也被广泛使用)是读取外部数据,将其外部格式转换为某种统一的内部格式,并创建一个以该内部格式表示图像的对象。例如,在 Windows 上,您可能会读取外部文件并将它们全部转换为 Windows 位图。

于 2013-11-13T19:16:42.883 回答
1

as far as you get type dynamically you can not use templates directly (templates implement static polymorphism)

if you know all types of images you can combine 2 approaches: declare an abstract class and instatiate your template class (derived from base) with these types and use a sort of factory to create corresponding class.

class base
{
public:
    virtual int getWidth() = 0;
};

template <class T> class ImageOfSomeType : public base
{
public:
   virtual int getWidth() { return width; };
};
// in a cpp file:
//The explicit instantiation part
template class ImageOfSomeType <MyType1>; 
template class ImageOfSomeType <MyType2>;

and in some place ()

base * createImage()
{
   ...
   if (image_type == "type1") return new ImageOfSomeType<MyType1>;
   ...
}
于 2013-11-13T19:27:56.953 回答