エンティティクラス、基本コンポーネントクラス、およびいくつかの基本コンポーネント派生クラスがあります。エンティティクラスには、基本コンポーネントポインタの配列が含まれています。
class CComponent
{
public:
static unsigned GetType() { return -1; }; //Base identifier
//...
};
class CPoint : CComponent
{
public:
static unsigned GetType() { return 0; }; //Point identifier
}
class CEntity
{
private:
CComponent* aComponents[3];
public:
// ...
//Getter by component ID here!
};
特定のコンポーネントタイプをその整数識別子(CPointコンポーネントクラスの場合は0)と一緒にマップして、Entityクラスの適切なタイプに簡単にキャストできるようにする方法を知りたいです。
例:CPointコンポーネントをエンティティコンポーネント配列(もちろん位置0)に追加し、コンポーネントの整数識別子(この場合は0)を入力してCPoint(型キャスト)として取得したいとします。 。巨大な「スイッチ」ケースはできるだけ避けたいです!
PS:派生したもののプロパティと一致する、基本コンポーネントクラスの仮想関数の負荷を使用したくありません。(基本コンポーネントクラスに仮想SetPos関数を含めたくありませんが、その場所はCPointクラスにあります)。
PS#2:'etarion'がコメントしているように、私は次のようなものが欲しいです:
dynamic_cast<get_type_for(0)*>(obj)
もちろん、それが私が達成したいメカニズムです。それが可能かどうかはわかりません。