[英]C++ converting back and forth from derived and base classes
我想知道C ++中是否有一种方法可以完成以下任务:
我有一个名为ResultBase
的基类,还有两个派生自该类的类, Variable
和Expression
。 我有一些对vector<ResultBase>
起作用的方法。 我希望能够将Variable
和Expression
向量传递到这些方法中。 我可以通过创建vector<ResultBase>
并使用static_cast
填充来自我的Variable / Expression向量的成员来实现。 但是,一旦向量通过方法运行,我希望能够将其作为Result / Expression的向量取回。 我肯定知道我要回哪一个。 static_cast在这里不起作用,因为没有一种方法可以从ResultBase
重构变量/表达式,更重要的是,我没有变量/表达式的原始属性
这些方法修改了ResultBase
某些属性,我需要将这些更改反映到原始向量中。 (即ResultBase
具有一个称为IsLive
的属性,其中一种方法将修改此属性。我希望将此IsLive
值反映在用于创建ResultBase
的派生类中。
最简单的方法是什么?
vector<ResultBase *>
应该解决您的切片问题vector<ResultBase>
绝不会包含从ResultBase
派生的类,而是通过复制ResultBase
部分来复制“切片”(例如Expression
。
请参阅什么是对象切片? 有关切片的详细说明。
一种可能是将对vector<ResultBase>
起作用的函数vector<ResultBase>
为对vector<T>
起作用的函数模板,其中T
为模板参数。 为了更加通用,这些函数可以在一对迭代器上运行,而不是在特定的容器类型上运行。
然后,您可以使用vector<Variable>
或vector<Expression>
代替vector<ResultBase>
vector<Expression>
来调用它们,只要Variable
和Expression
都是ResultBase
适当替代ResultBase
,就应该派生类。
就像Erik所说的那样,您可以使用指针来获得容器的多态行为。 为了简化内存管理,通常首选使用智能指针向量或Boost ptr_vector
不是原始指针向量。
由于几乎相同的原因,无法将int
转换为char
然后再返回,以保留原始值,因此无法将派生类的实例转换为基然后再返回到deriv,同时保留其原始值。 如果所有其他方法均失败,则可能会合并在一起,在其中使用修改后的ResultBase
对象以某种方式通过函数所做的任何更改来更新原始的Variable
或Expression
对象。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.