Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使列表中的子对象自转换为同一父对象的其他子对象的最佳方法_C++_Oop_Templates_Design Patterns_Vector - Fatal编程技术网

C++ 使列表中的子对象自转换为同一父对象的其他子对象的最佳方法

C++ 使列表中的子对象自转换为同一父对象的其他子对象的最佳方法,c++,oop,templates,design-patterns,vector,C++,Oop,Templates,Design Patterns,Vector,我有一个指向父对象的指针列表 vector<Parent*> list; 但是我想不出一个好的解决方案来解决这个问题。最后,将有数百个来自父类的其他子类也会这样做,但在其他条件下,所以我想要一个好的可扩展解决方案 谢谢通常,您不能用其他对象替换当前对象。您必须将此操作移到Execute之外 对于指针向量: Parent* Child1::Execute() { ... return condition ? new Child2 : this; } newobj =

我有一个指向父对象的指针列表

vector<Parent*> list;
但是我想不出一个好的解决方案来解决这个问题。最后,将有数百个来自父类的其他子类也会这样做,但在其他条件下,所以我想要一个好的可扩展解决方案


谢谢

通常,您不能用其他对象替换当前对象。您必须将此操作移到
Execute
之外

对于指针向量:

Parent* Child1::Execute() {
    ...
    return condition ? new Child2 : this;
}

newobj = list[i]->Execute();
if (newobj != list[i]) {
  delete list[i];
  list[i] = newobj;
}
对于合适的智能指针向量,它更简洁:

list[i] = list[i]->Execute();

你可以发布一个完整的代码样本。。。即使它没有编译。很难准确地理解你在问什么。此外,您是否在谈论派生类而不是子类?谢谢您的回答。根据我的理解,子类是从另一个派生的类。这正是我要寻找的!谢谢
Parent* Child1::Execute() {
    ...
    return condition ? new Child2 : this;
}

newobj = list[i]->Execute();
if (newobj != list[i]) {
  delete list[i];
  list[i] = newobj;
}
list[i] = list[i]->Execute();