代码之家  ›  专栏  ›  技术社区  ›  int3

初始化未知子类的模式

  •  0
  • int3  · 技术社区  · 16 年前

    我试图创建一个函数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处理一切。

    2 回复  |  直到 16 年前
        1
  •  2
  •   Stefan Steinegger    16 年前

    你为什么不实现一个虚拟复制方法?

    AbstractBase* storage = base.Copy()
    

    顺便说一句,这是非常特定于C++的,因为使用C#可以简单地通过反射来实现。

    Activiator.CreateInstance(temp.GetType(), temp);
    

        2
  •  0
  •   Dewfy    16 年前
    • 如果你能使用模板。
    推荐文章