【发布时间】:2010-10-23 13:18:37
【问题描述】:
在简单的继承层次结构示例中:
class Food
{
virtual ~Food();
};
class Fruit : public Food
{
virtual ~Fruit();
};
class Apple: public Fruit
{
virtual ~Apple();
}
class Vegetable: public Food
{
virtual ~Vegetable();
}
我希望创建一个可以从其子类或基类实例中克隆对象的方法:
Apple* apple1 = new Apple();
Apple* clone1 = apple1->clone();
Food* food1 = apple1;
Apple* clone2 = food1->clone();
我看到了一些可能的解决方案:
使用多态性创建为每个子类明确定义的虚函数。
使用模板化工厂方法获取类的实例和子类的类型来创建新实例。
为存储在别处的每个类和子类注册一个 id,以便在调用基类克隆函数时查找要创建的子类。
这些似乎都不理想,但我更倾向于第三种解决方案,因为它简化了对克隆函数的调用,而无需为每个子类编写定义(会有很多子类)。
但是,我非常愿意接受任何建议,有没有更好的方法来做到这一点?
【问题讨论】:
标签: c++ templates refactoring polymorphism factory