【发布时间】:2012-04-05 13:33:06
【问题描述】:
我正在尝试制作一个资源加载器,并希望拥有一个类资源和一个模板类资源管理器。不同类型的资源继承自基础资源类,例如图像、3d 网格等。
我可以为任何类型的资源创建一个映射,但是我将无法调用特定于派生类的函数。 3dMesh 可能有 getVertecies(),而图像可能有 getWidth() 等。
因此,我打算使用模板化的 resourceManager 类。
然后您可以创建资源管理器,例如:
resourceManager<3dMesh> resMan3DMeshes();
resourceManager<picture> resManPictures();
资源管理器将返回资源类型的指针,而不是基础资源类。这样您就可以调用特定于每种资源类型的函数。
pointerToMesh->getVerticies();
pointerToPicture->getWidth();
但是,使用这种方法,您可以传入任何内容来创建资源管理器。
resourceManager<int> resManInts();
这很好,除了资源管理器应该能够调用基础资源类的函数。例如,基础资源类将具有用于从文件加载的虚函数,但资源管理器将无法调用这些函数,因为它可以作为模板传递任何内容,以及 int 或字符串或任何没有 loadFromFile( )。
我正在考虑对基类进行模板规范化,但是它会返回基类的指针而不是派生的指针,除非我为每个派生类专门化它,但我也可能不有一个模板类,但每个类型只有一个资源管理器类。
那么,有没有什么方法可以使用模板并具有调用派生类函数的优势,同时仍然可以访问基类的函数?
【问题讨论】:
-
如果您的模板调用类成员,那么您将无法在没有这些成员的类型上实例化模板。它不会编译。
-
我在解析您的问题时遇到了问题。你能排除一些问题领域语言吗?
标签: c++ class templates derived