我有 3 个类,,,,B
派生自一个基类:C
D
A
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;
}
}
然后,如果我有一个类型的指针B
,我想将B
工厂创建的对象分配给它。我想到的唯一合理的解决方案是:
std::shared_ptr<B> b = std::shared_ptr<B>(dynamic_cast<B*>(createObject(0)));
但它看起来很丑。有没有更好的解决方案?或者也许我应该尝试用我的函数创建对象的不同方式?