我正在尝试制作一个像这样的函数f:
StorageObject::addItem (const AbstractBase& base) {
AbstractBase* storage = new Derived1(base);
}
但是,我希望f能够使用Derived2,Derived3等类。有没有办法让f调用正确的构造函数,具体取决于传递给它的AbstractBase的特定子类,而不使用类型代码?
要将问题放在上下文中,我使用此函数初始化类中的对象列表。虽然我可以做类似
的事情Derived1* temp = new Derived1();
storageobject.addItem(*temp);
delete temp;
我更愿意做像
这样的事情storageobject.addItem(Derived1());
并让storageobject处理所有内容。
答案 0 :(得分:2)
为什么不实施虚拟副本方法?
AbstractBase* storage = base.Copy()
顺便说一句,这是C ++特有的,因为使用C#可以简单地通过反射来实现。
Activiator.CreateInstance(temp.GetType(), temp);
当然,周围有一些不错的工厂模式,但这实际上取决于你需要解决的具体问题。
答案 1 :(得分:0)