私はいくつかのクラスを持っています:
class Base
{
public:
virtual void Something() = 0;
}
class A : public Base
{
public:
virtual void Something() { /*...*/ }
void SpecialActionForA();
}
class B : public Base
{
public:
virtual void Something() { /*...*/ }
void SpecialActionForB();
}
そして配列:
Base* MyMembers[2];
MyMembers[0] = new A;
MyMembers[1] = new B;
そして私はやりたい:
A* pointer_to_a = Get(0);
B* pointer_to_b = Get(1);
Get()
この機能を実装する良い方法はありますか?
私の解決策は次のとおりです。
template <typename T>
T* Get(int index)
{
return dynamic_cast<T*>(MyMembers[index]);
}
しかし、最初に私が書かなければならないのは
A* pointer_to_a = Get<A>(0)
追加の<A>
;が必要です。
2 つ目は、何らかの形で次のnew
ように失敗した場合です。
MyMembers[0] = new B;
その後、Get()
失敗しました。
私が欲しいのは、インデックス 0 を A にマップできる自動メカニズムのようなものです。
追加の詳細: 実際には、80
派生したさまざまなクラスBase
(それらは私のユーザー インターフェイスです) が
あり、実際のクラス (実際の UI) を取得して処理を実行する必要があります。
私が使用する必要がある機能は上記のSpecialActionForA()
...などです。
Something()
も使用されますが、これらの UI の初期化段階、または UI マネージャー システムによって管理されるものです。