我想在遊戲中實現一個紀念模式來實現檢查點。模板,多態,抽象基類指針和運行時鑄造
我有一個GameObject指針在遊戲中的列表。 GameObject是一個抽象類,它是由像StaticObject,AnimatedObject等類實現的...
我想使我的Memento類儘可能抽象,所以我已經模板化了我的整個Memento系統。
我的(非常準系統,用於調試目的)紀念類是;
template<class T>
class Memento
{
public:
Memento() { }
Memento(T data)
{
setData(data);
}
void setData(T data)
{
//wanting this function to do complex behaviour
}
T _state;
};
我會放入邏輯來區分T是否是指針或以後。
_state需要是實際GameObject副本的指針,而不僅僅是指針本身的副本,因爲這會破壞Memento的目的。
我想在Memento模板中做什麼的過程是;
1)將指針傳遞給抽象基類。
2)確定它指向的子類的類型(在運行時)。
3)在堆上創建一個新的子類,其指針是_state(從2中獲得的類型)。
4)複製數據。
我遇到的問題是3.似乎沒有辦法讓我可以得到適當類型的子類。
typeid(* data)和decltype(* data)返回對孩子的引用。如果我嘗試使用auto,它也是一個參考。顯然,我不能使用新的參考作爲類型。
解決這個問題的方法顯然是在Memento之外新建子類的副本並將其傳入。但是,我有興趣知道是否有一種方法可以在運行時在Template類中完全執行。我一直在試着看看我能否讓它工作幾個小時,而我固執的一部分並不想放棄。
Thankyou !!!!!!! – whalebiologist 2011-04-05 21:23:20