使用mfc提供的serialize功能對型別進行序列化/反序列化非常的方便。當軟體公升級後,serialize的內容可能也會發生變化,這時,就可以使用mfc提供的版本控制功能解決反序列化因為內容不同引起的衝突了。
編寫可序列化類時,mfc用implement_serial巨集指定的模式號作為版本控制的依據。反序列化時,mfc將檔案中記錄的模式號與應用程式中使用的模式號進行對比,如果不匹配,mfc將丟擲乙個carchiveexception異常,其m_cause等於carchiveexception::badschema。為了避免產生異常,我們需要在指定新模式號的同時使用versionable_schema標誌,如下所示:
implement_serial(xx, ***, 2 | versionable_schema) //假設公升級前的模式號是1
這樣,在serialize函式內就可以通過getobjectschema函式獲得反序列化檔案的模式號了,如下所示:
void xx::serialize(carchive& ar)
else}}
注意:getobjectschema函式必須在讀取物件資料之前呼叫,且只能呼叫一次,如果getobjectschema在呼叫serialize前後被呼叫了兩次,則返回-1。
可能有個別情況是模式號無法解決的,那時大家可以嘗試這兩個方法(摘自網路):
1. 對不同版本的序列化檔案應該不同的副檔名,在serialize中判斷副檔名,呼叫相應的反序列化實現。
2. 製作版本公升級工具,把舊版本的序列化檔案轉換為新版本格式。
ogre 不常用類記錄之Serializer
一 serializer 位置 ogreserializer.h 主功能 讀寫檔案 從它繼承的類有 meshserializerimpl,skeletonserializer,gpunamedconstantsserializer。同時它又是繼承自serializeralloc 一種記憶體管理模式,...
MFC如何生成乙個可序列化的類
一 mfc允許物件在程式執行的整個過程中持久化的序列化機制 1 序列化是指向持久化儲存媒介 如乙個磁碟檔案 讀或寫物件的過程。2 序列化用於在程式執行過程時或之後修復結構化資料 如c 類或結構 的狀態。3 mfc支援cobject類中的序列化,所以,所有繼承於cobject的類可以利用cobject...
python可迭代 python中可迭代物件有哪些
python中的可迭代物件有哪些?python中的可迭代物件有 列表 元組 字典 字串 常結合for迴圈使用 判斷乙個物件是不是可迭代物件 from collections import iterable isinstance list range 100 iterable isinstance s...