我想這是一個經典,但在我的情況下,我有約束,應該簡化問題。C++:通過向下轉換擴展對象到派生類
這只是我得到了一些結構A在我的模塊的輸入,並且想要添加一些屬性。所以我創建了一個擴展A的結構B,並添加了我所需要的。
現在每當我調用一個期望B的方法但我給它一個A時,編譯器並不高興:一個對象可能不是Bs,就像所有的貓都不是獅子一樣。
但在我的情況下,我發誓,儘管使用較少的屬性,但所有的As都是Bs。沒有找到的屬性可以報告爲未初始化,這很好,我也發誓我在初始化之前永遠不會調用屬性。基本上,我在獲取A對象作爲輸入時首先要做的是填充剩餘的B屬性,這些屬性是基於A屬性計算的。我只是不想複製當我進入Bs只是爲了添加一些屬性,因爲然後As的屬性將被複制到內存中。我不會修改A的原始屬性,我只是要用它們來計算派生屬性,然後傳遞並使用A屬性和派生屬性處理B對象。
例子:
從常見的,項目級標題:
struct Rectangle {
// Side lengths
int a,b;
}
從局部標題:
struct LocalRectangle : Rectangle {
int area;
}
void updateModule(Rectangle inputRect);
從本地源:
void updateModule(Rectangle inputRect) {
LocalRectangle r = (LocalRectangle)inputRect;
r.area = r.a*r.b;
// More processing ...
}
我如何做這個 ?
由於提前,
查爾斯
你可以請郵編? –
也許你可以添加一個字段到'std :: map'類型的As結構中,該結構將保存不同的屬性,並刪除Bs結構,成爲A類型的一切。 – LoPiTaL
你可以修改'A'嗎? – Motti