C++ C++;模板仅限于基类及其派生类

C++ C++;模板仅限于基类及其派生类,c++,class,templates,derived,C++,Class,Templates,Derived,我正在尝试制作一个资源加载器,希望有一个类资源和一个模板类资源管理器。不同类型的资源继承自基本资源类,例如图像、三维网格等 我可以拥有任何类型的资源的映射,但这样我就无法调用特定于派生类的函数。3dMesh可能具有GetVertexies(),而图像可能具有getWidth()等 因此,我打算使用一个模板化的resourceManager类 然后您可以创建资源管理器,如: resourceManager<3dMesh> resMan3DMeshes(); resourceMana

我正在尝试制作一个资源加载器,希望有一个类资源和一个模板类资源管理器。不同类型的资源继承自基本资源类,例如图像、三维网格等

我可以拥有任何类型的资源的映射,但这样我就无法调用特定于派生类的函数。3dMesh可能具有GetVertexies(),而图像可能具有getWidth()等

因此,我打算使用一个模板化的resourceManager类

然后您可以创建资源管理器,如:

 resourceManager<3dMesh> resMan3DMeshes();
 resourceManager<picture> resManPictures();
然而,使用这种方法,您可以传入任何东西来创建资源管理器

 resourceManager<int> resManInts();
resourceManager resManInts();
这很好,但资源管理器应该能够调用基本资源类的函数。例如,基本资源类将有一个用于从文件加载的虚拟函数,但资源管理器将无法调用这些函数,因为它可以作为模板传递任何内容,以及int或string或任何没有loadFromFile()的内容

我曾考虑对基类进行模板规范化,但它会返回基类的指针,而不是派生类的指针,除非我对每个派生类都进行了专门化,但我也可以不使用模板类,而是为每种类型使用一个资源管理器类


那么,是否有任何方法可以使用模板并具有调用派生类的函数的优势,同时仍然可以将ACSES获取到基类的函数?

是的,可以将模板参数约束到特定类的后代


或者你可以就这样离开。如果模板参数不满足所需的接口,资源管理器无论如何都将无法编译。

如果您希望提供给您的所有类型都有“loadFromFile()”方法,而不仅仅是在模板中使用此方法。如果有人给你一个模板参数“int”,它就不会编译,据我所知这是可以的,这个人不应该这样做


只需记录您希望提供给您的所有类型都具有的接口(例如“have a loadFromFile()method”)。

如果模板调用类成员,则您将无法在没有这些成员的类型上实例化模板。它无法编译。我真的很难解析你的问题。你能找出一些领域语言的问题吗?好的,这似乎是最简单的解决方案。谢谢:)如果我有一个虚拟基类资源,它实现了我希望资源管理器调用的所有函数,然后确保所有派生类都覆盖了该虚拟函数,那么这些派生类中的任何一个都可以与资源管理器一起使用,而不会出现编译错误。@jtedit如果在编译时知道所有信息,不需要使用带有虚拟方法的基类。在需要的地方使用虚拟方法(当前或将来的增强)。
 resourceManager<int> resManInts();