龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > C/C++开发 >

我做的一个C++用的Serialization库(含部分源码)(5)

时间:2009-12-22 15:42来源:未知 作者:admin 点击:
分享到:
140 template 141 void AddFieldSerializer(_Type* Object , _Field _Type::* FieldPointer , VUnicodeString FieldName) 142 { 143 FFieldSerializers.Add(new FieldSerializer (Object,FieldPointer,FieldName));

140       template

141       void AddFieldSerializer(_Type* Object , _Field _Type::* FieldPointer , VUnicodeString FieldName)

142       {

143         FFieldSerializers.Add(new FieldSerializer<_Type,_Field>(Object,FieldPointer,FieldName));

144       }

145     private:

146       FieldSerializerBase::List      FFieldSerializers;

147     public:

148       VL_SerializableObject();

149       ~VL_SerializableObject();

150

151       virtual void            Serialize(VL_Serializer* Serializer , VL_CommonObject& ClassObject);

152       virtual VBool            Deserialize(VL_Serializer* Serializer , const VL_CommonObject& ClassObject);

153     };

154

155     class VL_Serializer : public VL_Base

156     {

157     public:

158       class ClassSerializerBase : public VL_Base

159       {

160       public:

161         typedef VL_List , false , ClassSerializerBase*>    List;

162         virtual VBool          Accept(VL_SerializableObject* Object)=0;

163         virtual VUnicodeString      GetClassTypeName()=0;

164       };

165

166       template

167       class ClassSerializer : public ClassSerializerBase

168       {

169       protected:

170         VUnicodeString          FClassTypeName;

171

172       public:

173         ClassSerializer(VUnicodeString ClassTypeName)

174         {

175           FClassTypeName=ClassTypeName;

176         }

177

178         VBool Accept(VL_SerializableObject* Object)

179         {

180           return dynamic_cast<_Type*>(Object)!=0;

181         }

182

183         VUnicodeString GetClassTypeName()

184         {

185           return FClassTypeName;

186         }

187       };

188     protected:

189       ClassSerializerBase::List      FClassSerializers;

190     public:

191       VL_Serializer();

192       ~VL_Serializer();

193

194       void                RegisterClass(ClassSerializerBase* aClassSerializer);

195       ClassSerializerBase*        SelectClass(VL_SerializableObject* Object);

196       VL_CommonObject            Serialize(VL_SerializableObject* Object);

197     };

198

199     template

200     void GenericDeserializerMethod(VL_Serializer* Serializer , const VL_CommonObject& Object , VL_SerializableObject*& Result)

201     {

202       Result=new _Type();

203       Result->Deserialize(Serializer,Object);

204     }

205

206 #define VL_REGISTER_SERIALIZABLE_CLASS(SERIALIZER,CLASS)                    

207     do{                                            

208     (SERIALIZER)->RegisterClass(new VL_Serializer::ClassSerializer(L#CLASS));    

精彩图集

赞助商链接