[英]Polymorphism and serialisation with the Marmalade SDK
使用Marmalade SDK進行序列化時出現問題。 我了解序列化原語的原理,但是多態對象呢?
根據果醬的示例,您可以序列化對象,如下所示:
void Serialise()
{
uint8 isObject;
if (IwSerialiseIsWriting())
// writing
{
// record whether m_Happy exists
isObject = m_Happy ? 1 : 0;
IwSerialiseUInt8(isObject);
// serialise out m_Happy if it exists
if (m_Happy)
m_Happy->Serialise();
}
else
// reading
{
IwSerialiseUInt8(isObject);
// if an object was written out then read it in
if (isObject)
{
// if m_Happy already exists then delete it
if (m_Happy)
delete m_Happy;
m_Happy = new CHappy;
// serialise in m_Happy
m_Happy->Serialise();
}
}
}
我的問題是當您具有多態類型時如何使用此方法? 例如:
我有一個對象:
AbstractClass *object;
序列化時,如何正確初始化該對象? 根據簡單的果醬示例,我將:
// reading
if(objectExists) {
object = new AbstractClass(); // uh oh
}
要使用它,您需要在具體的子類之一上調用new。 例如 -
//Writing -
AbstractClass *object = new ConcreteClass();
object->Serialise();
其中ConcreteClass
是AbstractClass
的具體子類。 從理論上講,除非使用多態性,否則您不應僅擁有Abstract類的對象。
從序列化文件中讀取時,適用相同的代碼。 提示:您需要按照序列化對象/基元的順序反序列化它們。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.