自定义 序列化1

使用过微软framework 的人对他的序列化肯定印象深刻,方便性真是没得说了。之前用C#做过一套绘图系统,图形的保存,以及保存后的版本兼容性基本上没费什么时间。后来发现,其实序列化在其他方面应用很多,比如通讯,我只要定义好链路帧格式,其他应用内容都可以交给序列化来做,非常的方便。现在的系统,基于c/c++ 跨平台。这么重要的基础功能也不想基于他看第3方控件。仔细研究了下framewok的序列化机制,决定自己实现。

首先,要定位功能,肯定没办法和framework比,毕竟基础和能力在那里,只实现基本功能,而且功能受一定的约束。

其次,准备工作:

a 所有类的基类需要定义 CJObject;

b 所有类需要能动态生成,以及信息可查询,这个就之际借鉴MFC的动态生成机制,现成的东东,改粑改粑就能用

c 为了编程方便,仿照framework 引入CJType类,所有基于CJObject的类都可以直接获取CJType对象,通过它就可以查询类型信息,CJObject 和 CJType的定义:(逐步更新)

class EXPORTED_JHMF CJObject
{
 DECLARE_CLASS(CJObject)
public:
 CJObject();
 CJType GetType();
 jbool IsKindOf(const CJRuntimeClass* pClass);
 jint32 GetHashCode();

 //序列化接口
 virtual void GetObjectData(CJSerializationInfo* info) {}
 virtual void DeSerializationObjectData(CJSerializationInfo* info) {}

private:
 jint32 m_hashCode;
};

 

 序列化接口纯属仿照framework做,感觉这种做法特别方便

 

class EXPORTED_JHMF CJType
{
 //类名称
public:
 CJType();
 CJType(CJRuntimeClass* pRuntimeClass);
 ~CJType();

 jbool   IsEmpty(){return m_pRuntimeClass == JNULL;}
 jbool   IsArray();
 jbool   IsSubclassOf(CJType t);
 CJString  GetName();
 CJRuntimeClass* GetRuntimeClass() const {return m_pRuntimeClass;}
private:
 CJRuntimeClass* m_pRuntimeClass;
};
inline  jbool operator==(const CJType& t1, const CJType& t2)
{ return t1.GetRuntimeClass() == t2.GetRuntimeClass(); }

 

 

有了这些,基本上可以开始序列化工作了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值