0
我有一個函數,我不能輕易更改的函數,它的簽名或調用者可以獲得對結構的引用。這個結構是一個基類,但是根據在這個函數中發現的東西,這個結構被確定爲繼承類型並且像這樣操作。稍後,根據我們在此設置的方式,這些數據將根據情況進行dynamic_cast。作爲派生類有條件地處理/投射基類參考參數並將其返回
struct Base {
int baseMember;
}
struct Derived : public Base {
int derivedMember;
}
enum EvtType {
EVT_A,
EVT_B
}
void handleEvent(Base& data) {
data.baseMember++; //adjust the common member
switch (getEventType()) // some static returning EvtType
{
case EVT_A:
// I can instatiate this as required, setting baseMember in a constructor
// or something
Derived derivedInst;
// and now i can set the derived members as needed
derivedInst.derivedMember += 56; // this is just what happens with EVT_As
// FIXME: but how do I get this object into the data parameter?
break;
case EVT_B:
// do it differently, but the same idea
break;
}
//handle other event types
}
這可能與類似reinterpret_cast
,即使輸入參考的對象可能已經被別人爲Base
分配呢?
另外,根據在開關的情況下的內容,是有從EvtType
建立映射到建立正確的派生類,考慮到我不能擴展Derived
或Base
班整潔的方式。
所以你基本上是問,如何說'data = derivedInst;'?我不相信這是可能的,除非基類使用類型擦除。 – AlchemicalApples
爲什麼你不能'static_cast(data).derivedMember + = 56'?我不太明白。 –
Simple