0

私は現在、コンポーネントクラスに追加のデータを保存せずに、さまざまなコンポーネントタイプの一意の 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 を作成できます。データをクラス自体に仮想関数として格納する必要はありません (静的にすることはできないため、比較が必要になるたびに新しいインスタンス)

静的メソッド メンバーによって使用される明らかな余分なメモリを除いて、このようなシステムを使用することに根本的な問題はありますか?

-ありがとう

4

0 に答える 0