私はリソースローダーを作成しようとしていますが、クラスリソースとテンプレートクラスのリソースマネージャが必要です。基本クラスとその派生クラスに限定されたC++テンプレート
任意のリソースタイプのマップを作成できますが、派生クラス固有の関数を呼び出すことができません。 3dMeshには画像にgetWidth()などのgetVertecies()が含まれている可能性があります。
このため、私はテンプレートのresourceManagerクラスを使用する予定でした。リソースマネージャは、リソースタイプではなく、ベースのリソースクラスのポインタを返す
resourceManager<3dMesh> resMan3DMeshes();
resourceManager<picture> resManPictures();
:
次に、あなたは次のようにリソースマネージャを作成することができます。そうすれば、各リソースタイプに固有の関数を呼び出すことができます。
pointerToMesh->getVerticies();
pointerToPicture->getWidth();
ただし、このアプローチを使用すると、のリソースマネージャを作るために何かを渡すことができます。
resourceManager<int> resManInts();
リソースマネージャが基本リソースクラスの関数を呼び出すことができることを除けば、これは問題ありません。例えば、基本リソースクラスはファイルからロードするための仮想関数を持ちますが、リソースマネージャはテンプレートとして何かを渡すことができないので、これらの関数を呼び出すことができません。intや文字列などはloadFromFile( )。
私は基本クラスでテンプレートの仕様を使って何かをしたいと考えていましたが、派生クラスごとに特殊化しない限り、基本クラスのポインタと派生クラスのポインタは返されますが、テンプレート化されたクラスはありませんが、代わりに各タイプのリソースマネージャークラスがあります。
テンプレートを使用して派生クラスの関数を呼び出す利点はありますが、基本クラスの関数にはまだ慣れていませんか?
テンプレートがクラスメンバーを呼び出す場合、そのメンバーを持たないタイプでテンプレートをインスタンス化することはできません。それはコンパイルされません。 – sje397
あなたの質問を解析するのに本当に問題があります。おそらく問題のドメイン言語のいくつかを除外できますか? –