程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++對象序列化和rtti

C++對象序列化和rtti

編輯:C++入門知識

以前以為序列化和rtti沒什麼關系,其實關系密切。

先說序列化,序列化是將對象轉化成字節流數據,以便進行數據傳輸和存儲,最簡單的直接的說法就是‘存盤’,玩個單機游戲,玩著玩著存個盤,游戲裡的主角,npc,地圖各種游戲元素,以某種方式存儲到文件中,只不過單說序列化不講介質,從對象變成二進制數據流,就是序列化。序列化的目的是為了,在將來某個時刻反序列化,從字節流數據轉化成對象,繼續之前的某個軟件應用。

rtti大致是說,在運行時識別動態類型信息,沒有rtti,反序列化的過程大致像這樣:

拿到一段字節數據

=>

分析某個公共頭標識

=>

if identity ==  1 then

 obja = new ClassA

 obja.load(剩下的部分)

else if identity == 2 then

 objb = new ClassB

 objb.load(...)

 ...

 end

會有一堆的if else,或者switch case,同時還有各種類的new,或者其它什麼。

設計一個公共基類,也改變不了上面這些局面。當然公共基類對於一個全面面向對應的應用是很必須的,除非你說服自己不要用面向對象。

有了rtti,就可以做很cool的事情,反序列化其實可以做成這樣:

拿到一段字節數據

=>

直接生成一個基類對象指針

=>

丟給系統對象管理器

=>

用rtti識別動態類型丟給各自的管理器或者直接參與邏輯

MFC裡有一個局限的實現,具體參見相關文檔,我說的局限是指,我不想用MFC的CObject基類如何指定自己的基類,我如何指定自己的內存分配器,我如何定制自己的存盤格式。

aspx"> 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved