簡體   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