我想在游戏中实现一个纪念模式来实现检查点。模板,多态,抽象基类指针和运行时铸造
我有一个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