繁体   English   中英

C ++从派生类和基类来回转换

[英]C++ converting back and forth from derived and base classes

我想知道C ++中是否有一种方法可以完成以下任务:

我有一个名为ResultBase的基类,还有两个派生自该类的类, VariableExpression 我有一些对vector<ResultBase>起作用的方法。 我希望能够将VariableExpression向量传递到这些方法中。 我可以通过创建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>来调用它们,只要VariableExpression都是ResultBase适当替代ResultBase ,就应该派生类。

就像Erik所说的那样,您可以使用指针来获得容器的多态行为。 为了简化内存管理,通常首选使用智能指针向量或Boost ptr_vector不是原始指针向量。

由于几乎相同的原因,无法将int转换为char然后再返回,以保留原始值,因此无法将派生类的实例转换为基然后再返回到deriv,同时保留其原始值。 如果所有其他方法均失败,则可能会合并在一起,在其中使用修改后的ResultBase对象以某种方式通过函数所做的任何更改来更新原始的VariableExpression对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM