1 つの基本クラスから派生する3 つのクラス、、Bがあります。CDA
class A
{
// body
};
class B : public A
{
// body
};
class C : public A
{
// body
};
class D : public A
{
// body
};
B特定の型 ( 、Cまたは) のオブジェクトを作成し、それをクラスDへのポインターとして返すことができるファクトリ関数を作成したいと考えています。A
typedef std::shared_ptr<A> a_ptr;
a_ptr createObject(int type)
{
switch(type)
{
case 0:
return a_ptr(new B());
break;
case 1:
return a_ptr(new C());
break;
case 2:
return a_ptr(new D());
break;
}
}
そして、たとえば type のポインターがある場合、ファクトリによって作成されたオブジェクトをそれBに割り当てたいと思います。B私の頭に浮かんだ唯一の合理的な解決策は次のとおりです。
std::shared_ptr<B> b = std::shared_ptr<B>(dynamic_cast<B*>(createObject(0)));
しかし、それは醜く見えます。そのためのより良い解決策はありますか?または、関数でオブジェクトを作成する別の方法を試す必要がありますか?