我正在尝试制作一个资源加载器,并希望拥有一个类资源和一个模板类资源管理器。不同类型的资源继承自基础资源类,例如图像、3d 网格等。
我可以拥有任何类型资源的映射,但是我将无法调用特定于派生类的函数。3dMesh 可能有 getVertecies() ,而图像可能有 getWidth() 等。
因此,我将使用模板化的 resourceManager 类。
然后您可以创建资源管理器,例如:
resourceManager<3dMesh> resMan3DMeshes();
resourceManager<picture> resManPictures();
资源管理器将返回资源类型的指针,而不是基础资源类。这样您就可以调用特定于每种资源类型的函数。
pointerToMesh->getVerticies();
pointerToPicture->getWidth();
但是,使用这种方法,您可以传入任何内容来创建资源管理器。
resourceManager<int> resManInts();
这很好,除了资源管理器应该能够调用基础资源类的函数。例如,基础资源类将具有用于从文件加载的虚函数,但资源管理器将无法调用这些函数,因为它可以作为模板传递任何内容,以及 int 或字符串或任何没有 loadFromFile( )。
我正在考虑对基类进行模板规范化,但随后它将返回基类的指针而不是派生的指针,除非我为每个派生类专门化它,但我可能还没有模板化类,而是为每种类型提供一个资源管理器类。
那么,有什么方法可以使用模板并具有调用派生类函数的优势,同时仍然可以访问基类的函数?