リソースローダーを作成しようとしていますが、クラスリソースとテンプレートクラスリソースマネージャーが必要です。さまざまなタイプのリソースが基本リソースクラスから継承されます。たとえば、画像、3Dメッシュなどです。
任意のタイプのリソースのマップを作成できますが、派生クラスに固有の関数を呼び出すことができなくなります。3dMeshにはgetVertecies()が含まれている可能性がありますが、画像にはgetWidth()などが含まれている可能性があります。
そのため、テンプレート化されたresourceManagerクラスを使用する予定でした。
次に、次のようなリソースマネージャーを作成できます。
resourceManager<3dMesh> resMan3DMeshes();
resourceManager<picture> resManPictures();
リソースマネージャーは、基本リソースクラスではなく、リソースタイプのポインターを返します。そうすれば、各リソースタイプに固有の関数を呼び出すことができます。
pointerToMesh->getVerticies();
pointerToPicture->getWidth();
ただし、このアプローチを使用すると、リソースマネージャーを作成するために何でも渡すことができます。
resourceManager<int> resManInts();
リソースマネージャが基本リソースクラスの関数を呼び出すことができる必要がある場合を除いて、これは問題ありません。たとえば、基本リソースクラスにはファイルからロードするための仮想関数がありますが、リソースマネージャーは、テンプレートとして何でも渡すことができ、intまたはstringまたはloadFromFile( )。
基本クラスを使用してテンプレートを指定して何かを行うことを考えていましたが、派生クラスごとに特殊化しない限り、派生クラスではなく基本クラスのポインターが返されますが、テンプレートがない場合もあります。クラスですが、代わりにタイプごとにリソースマネージャークラスがあります。
では、基本クラスの関数にアクセスしながら、テンプレートを使用して派生クラスの関数を呼び出すという利点を活用する方法はありますか?