[英]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.