私は現在、コンポーネントクラスに追加のデータを保存せずに、さまざまなコンポーネントタイプの一意の ID を作成する必要があるエンティティコンポーネントシステムに取り組んでいます (静的仮想メソッドが必要になるため、動作しません。そのため、何かを比較するたびに新しいコンポーネントをインスタンス化する必要があります)。私が最終的に行ったアプローチは、テンプレート化されたメソッドを作成することでした:
/*statically instances unique pointers for different
TComponents - each with their own templated instance*/
template<typename TComponent>
static const COMP_ID& GetTComponentID()
{
DERIVES_FROM_COMPONENT_ASSERT;
static COMP_ID ID = Component::NewID();
return ID;
}
次に、GetTCompomponentID() で新しい静的 COMP_ID が初期化されるたびに一意の ID を返す静的メソッドをコンポーネントの基本クラスに設定します。
//retrieves static data identifier
static const COMP_ID& NewID()
{
static COMP_ID currID = 0;
currID++;
return currID;
}
これを使用して、使用するコンポーネントの派生物ごとに一意の静的 ID を作成できます。データをクラス自体に仮想関数として格納する必要はありません (静的にすることはできないため、比較が必要になるたびに新しいインスタンス)
静的メソッド メンバーによって使用される明らかな余分なメモリを除いて、このようなシステムを使用することに根本的な問題はありますか?
-ありがとう