我正在嘗試製作資源加載器,並希望擁有類資源和模板類資源管理器。不同類型的資源繼承自基礎資源類,例如圖像,三維網格等。C++模板限於基類及其派生類
我可以爲任何類型的資源創建映射,但是接下來我將無法調用特定於派生類的函數。 3dMesh可能具有getVertecies(),其中圖像可能具有getWidth()等。
因此,我打算使用模板化的resourceManager類。
然後,你可以創建資源管理器,如:
resourceManager<3dMesh> resMan3DMeshes();
resourceManager<picture> resManPictures();
資源管理器將返回的資源類型,而不是基礎資源類的指針。這樣你可以調用特定於每種資源類型的函數。
pointerToMesh->getVerticies();
pointerToPicture->getWidth();
但是,使用這種方法,您可以傳入任何東西來創建資源管理器。
resourceManager<int> resManInts();
這樣可以,除非資源管理器應該能夠調用基本資源類的功能。例如,基本資源類將具有用於從文件加載的虛擬函數,但資源管理器將無法調用這些函數,因爲它可以將任何東西作爲模板傳遞,並且int或字符串或其他任何沒有loadFromFile( )。
我正在考慮用基類做模板specilaisation,但它會返回基類的指針,而不是派生的指針,除非我專門爲每一個派生類,但是我也可以沒有模板類,但是每個類型只需要一個資源管理器類。
那麼,有沒有什麼方法可以使用模板,並且具有調用派生類的功能的優點,同時仍然可以獲得基類的功能?
如果您的模板調用類成員,那麼您將無法在沒有這些成員的類型上實例化模板。它不會編譯。 – sje397 2012-04-05 13:36:38
我很難解析你的問題。你能否將一些問題域語言分解出來? – 2012-04-05 13:41:41