我想创建一个图像模板类。该类将从文件中读取图像数据并将数据存储在其成员变量中。图像的数据类型存储在图像的标题中,事先不知道。
如何在不知道图像数据类型的情况下创建图像模板类?图像读取函数将读取标头并根据数据的数据类型分配该内存。
谢谢
模板不会做太多的自动化。模板允许您延迟处理(某些)类型的特定细节,直到编译时而不是在编写代码时 - 但是在编译代码时,必须知道用作模板参数的类型和值的所有细节. 它们特别不处理直到运行时才知道的类型变化,就像您在此处处理的那样。
您正在讨论的内容听起来更适合经典的 OOP 模型,具有基本的“图像”类,以及每种图像类型的派生类(例如,BmpImage、JpegImage、TiffImage 等)然后你'会有某种 ImageFactory 类,它读取数据,实例化从 Image 派生的某种类型的对象,最后返回一个Image *
新定义的对象,以便客户端代码可以根据需要显示、操作等图像.
显而易见的替代方案(也被广泛使用)是读取外部数据,将其外部格式转换为某种统一的内部格式,并创建一个以该内部格式表示图像的对象。例如,在 Windows 上,您可能会读取外部文件并将它们全部转换为 Windows 位图。
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>;
...
}