青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆-341  評論-2670  文章-0  trackbacks-0
    跟上一篇文章一樣,一樣的數(shù)據(jù)結(jié)構(gòu),但是添加了對數(shù)組、列表和映射的更多的支持。首先是代碼,然后是序列化后的XML文件。

    這里的代碼展示了如和向object inspector注冊自己感興趣的類和成員。至于成員的類型和容器里面的東西,會自動判斷。
  1 #include "..\..\..\..\VL++\Library\Platform\VL_Console.h"
  2 #include "..\..\..\..\VL++\Library\Data\Inspector\VL_ObjectInspector.h"
  3 #include "..\..\..\..\VL++\Library\Data\Inspector\VL_ObjectStrconv.h"
  4 #include "..\..\..\..\VL++\Library\Data\Inspector\VL_ObjectXML.h"
  5 #include "..\..\..\..\VL++\Library\Data\VL_DataAccess.h"
  6 #include "..\..\..\..\VL++\Library\Data\VL_System.h"
  7 
  8 using namespace vl;
  9 using namespace vl::platform;
 10 using namespace vl::inspector;
 11 using namespace vl::stream;
 12 using namespace vl::system;
 13 
 14 class Animal : public VL_Base
 15 {
 16 public:
 17     VInt                Age;
 18     VInt                Weight;
 19 };
 20 
 21 class Mammalian : public Animal
 22 {
 23 public:
 24     VInt                FingerCount;
 25 };
 26 
 27 class Cat : public Mammalian
 28 {
 29 public:
 30     VInt                BodyLength;
 31     VInt                TailLength;
 32 
 33     Cat()
 34     {
 35         Age=10;
 36         Weight=100;
 37         FingerCount=18;
 38         BodyLength=50;
 39         TailLength=30;
 40     }
 41 };
 42 
 43 class Fish : public Animal
 44 {
 45 public:
 46     VDouble                MaxDepth;
 47     VInt                Length;
 48 
 49     Fish()
 50     {
 51         Age=20;
 52         Weight=200;
 53         MaxDepth=3000;
 54         Length=25;
 55     }
 56 };
 57 
 58 class Bird : public Animal
 59 {
 60 public:
 61     VBool                CanFly;
 62     VUnicodeString        Name;
 63 
 64     Bird()
 65     {
 66         Age=30;
 67         Weight=300;
 68         CanFly=true;
 69         Name=L"Jack";
 70     }
 71 };
 72 
 73 class Human : public Mammalian
 74 {
 75 public:
 76     VUnicodeString                                                Name;
 77     VL_AutoPtr<Animal>                                            MainPat;
 78     Bird                                                        MainTransportation;
 79     VL_AutoPtr<Animal>                                            OtherPats[4];
 80     Bird                                                        OtherTranspotations[3];
 81     VL_List<VL_AutoPtr<Animal> , false , Animal*>                OtherPatsList;
 82     VL_List<Bird , false>                                        OtherTranspotationsList;
 83     VL_ListedMap<VUnicodeString , VL_AutoPtr<Animal>>            PatMap;
 84     VL_MultiMap<VUnicodeString , VL_AutoPtr<Animal> , false , VUnicodeString , Animal*>    PatMultiMap;
 85 
 86     Human()
 87     {
 88         Age=16;
 89         Weight=2000;
 90         FingerCount=20;
 91         Name=L"囧Smith";
 92 
 93         Cat* cat=new Cat;
 94         cat->Age=5;
 95         cat->Weight=150;
 96         cat->BodyLength=40;
 97         cat->TailLength=20;
 98         MainPat=cat;
 99 
100         MainTransportation.Name=L"Red Dragon";
101         MainTransportation.Age=3000;
102 
103         OtherPats[0]=new Cat;
104         OtherPats[1]=new Fish;
105         OtherPats[2]=new Bird;
106 
107         for(VInt i=0;i<3;i++)
108         {
109             OtherTranspotations[i].Name=L"Blue Dragon "+VUnicodeString(i+1);
110             OtherTranspotations[i].Age=3000+i*100;
111         }
112 
113         OtherPatsList.Add(new Cat);
114         OtherPatsList.Add(new Fish);
115         OtherPatsList.Add(new Bird);
116 
117         for(VInt i=0;i<3;i++)
118         {
119             OtherTranspotationsList.Add(Bird());
120             OtherTranspotationsList[i].Name=L"Green Dragon "+VUnicodeString(i+1);
121             OtherTranspotationsList[i].Age=3000+i*10;
122         }
123 
124         PatMap.Add(L"Cat",new Cat);
125         PatMap.Add(L"Fish",new Fish);
126         PatMap.Add(L"Bird",new Bird);
127 
128         PatMultiMap.Add(L"A",new Cat);
129         PatMultiMap.Add(L"A",new Fish);
130         PatMultiMap.Add(L"B",new Bird);
131     }
132 };
133 
134 VL_BEGIN_INSPECTOR_DECLARATION
135 
136     VL_BEGIN_BASE_CLASS(Animal)
137         VL_ADD_CLASS_MEMBER(Age)
138         VL_ADD_CLASS_MEMBER(Weight)
139     VL_END_CLASS(Animal)
140 
141     VL_BEGIN_SUB_CLASS(Mammalian,Animal)
142         VL_ADD_CLASS_MEMBER(FingerCount)
143     VL_END_CLASS(Mammalian)
144 
145     VL_BEGIN_SUB_CLASS(Cat,Mammalian)
146         VL_ADD_CLASS_MEMBER(BodyLength)
147         VL_ADD_CLASS_MEMBER(TailLength)
148     VL_END_CLASS(Cat)
149 
150     VL_BEGIN_SUB_CLASS(Fish,Animal)
151         VL_ADD_CLASS_MEMBER(MaxDepth)
152         VL_ADD_CLASS_MEMBER(Length)
153     VL_END_CLASS(Fish)
154 
155     VL_BEGIN_SUB_CLASS(Bird,Animal)
156         VL_ADD_CLASS_MEMBER(CanFly)
157         VL_ADD_CLASS_MEMBER(Name)
158     VL_END_CLASS(Bird)
159 
160     VL_BEGIN_SUB_CLASS(Human,Mammalian)
161         VL_ADD_CLASS_MEMBER(Name)
162         VL_ADD_CLASS_MEMBER(MainPat)
163         VL_ADD_CLASS_MEMBER(MainTransportation)
164         VL_ADD_CLASS_MEMBER(OtherPats)
165         VL_ADD_CLASS_MEMBER(OtherTranspotations)
166         VL_ADD_CLASS_MEMBER(OtherPatsList)
167         VL_ADD_CLASS_MEMBER(OtherTranspotationsList)
168         VL_ADD_CLASS_MEMBER(PatMap)
169         VL_ADD_CLASS_MEMBER(PatMultiMap)
170     VL_END_CLASS(Human)
171 
172     VL_BEGIN_INSPECTOR_MANAGER(AnimalManager)
173         VL_BIND_INSPECTOR(Animal)
174         VL_BIND_INSPECTOR(Mammalian)
175         VL_BIND_INSPECTOR(Cat)
176         VL_BIND_INSPECTOR(Fish)
177         VL_BIND_INSPECTOR(Bird)
178         VL_BIND_INSPECTOR(Human)
179     VL_END_INSPECTOR_MANAGER
180 
181 VL_END_INSPECTOR_DECLARATION
182 
183 void PrintAnimal(VL_InspectorManager::Ptr Manager , Animal* aAnimal)
184 {
185     VL_InspectorConverterManager Converter;
186     Converter.AddNormalConverter(new VL_InspectorReader);
187 
188     VL_ObjectInspector::Ptr Inspector=Manager->GetInspector(VL_InspectorSelector<Animal>::GetID());
189     GetConsole()->WriteLine(Converter.FindToStringConverter(Inspector)->ConvertToString(Inspector,aAnimal));
190 }
191 
192 void PrintType(VL_InspectorManager::Ptr Manager , VL_ObjectType::Ptr Type)
193 {
194     VL_InspectorConverterManager Converter;
195     Converter.AddNormalConverter(new VL_InspectorReader);
196 
197     VL_ObjectInspector::Ptr Inspector=Manager->GetInspector(L"VL_ObjectType");
198     GetConsole()->WriteLine(Converter.FindToStringConverter(Inspector)->ConvertToString(Inspector,Type.Object()));
199 }
200 
201 void WriteHuman(VL_InspectorManager::Ptr Manager , Human& human , VUnicodeString FileName)
202 {
203     VL_XMLDocument XML;
204     XML.GetRootElement()->SetName(L"objectxml");
205     VL_ObjectXML XMLSerializer;
206     XMLSerializer.Write(XML.GetRootElement(),Manager->GetInspector(L"Human"),&human);
207 
208     VL_FileStream XMLFile(FileName,VL_FileStream::vomWrite);
209     XML.Save(&XMLFile,true);
210 }
211 
212 VBool ReadHuman(VL_InspectorManager::Ptr Manager , Human& human , VUnicodeString FileName)
213 {
214     VL_XMLDocument XML;
215     VL_FileStream XMLFile(FileName,VL_FileStream::vomRead);
216     XML.Load(&XMLFile);
217 
218     Human NewHuman;
219     VPointer Data=&NewHuman;
220     try
221     {
222         VL_ObjectXML XMLSerializer;
223         XMLSerializer.Read(Manager,XML.GetRootElement()->GetChildren()[0]->GetElement(),Data);
224         return true;
225     }
226     catch(const VL_XMLError& Error)
227     {
228         GetConsole()->WriteLine(Error.Message);
229         return false;
230     }
231 }
232 
233 void vlmain()
234 {
235     GetConsole()->SetTitle(L"Vczh Library++ 2.0 Type Information Test");
236     GetConsole()->SetTestMemoryLeaks(true);
237     GetConsole()->SetPauseOnExit(true);
238     VUnicodeString WorkPath=VFileName(GetConsole()->GetAppPath()).MakeAbsolute(L"..\\TestFile\\").GetStrW();
239 
240     VL_FileStream LogStream(WorkPath+L"Console.txt",VL_FileStream::vomWrite);
241     VL_StreamWriter LogWriter(vceUtf16,true,&LogStream);
242     GetConsole()->SetLogger(&LogWriter);
243 
244     VL_InspectorManager::Ptr Manager=VL_GET_INSPECTOR_MANAGER(AnimalManager);
245 
246     Cat cat;
247     Fish fish;
248     Bird bird;
249     Human human;
250     PrintAnimal(Manager,&cat);
251     PrintAnimal(Manager,&fish);
252     PrintAnimal(Manager,&bird);
253     PrintAnimal(Manager,&human);
254 
255     for(VInt i=0;i<Manager->GetInspectorCount();i++)
256     {
257         GetConsole()->Write(L"typeof("+Manager->GetInspector(i)->GetID()+L") = ");
258         PrintType(Manager,Manager->GetInspector(i)->GetType());
259     }
260 
261     GetConsole()->WriteLine(L"開始寫入");
262     WriteHuman(Manager,human,WorkPath+L"Object.xml");
263     Human NewHuman;
264     GetConsole()->WriteLine(L"開始讀取");
265     ReadHuman(Manager,NewHuman,WorkPath+L"Object.xml");
266     GetConsole()->WriteLine(L"開始再次寫入");
267     WriteHuman(Manager,NewHuman,WorkPath+L"Object2.xml");
268 
269     VL_FileStream StreamA(WorkPath+L"Object.xml",VL_FileStream::vomRead);
270     VL_FileStream StreamB(WorkPath+L"Object2.xml",VL_FileStream::vomRead);
271     if(ReadText(&StreamA)==ReadText(&StreamB))
272     {
273         GetConsole()->WriteLine(L"序列化成功!");
274     }
275     else
276     {
277         GetConsole()->WriteLine(L"序列化前后不一致。");
278     }
279 }

    于是這里是序列化的結(jié)果:
  1 <?xml version="1.0" encoding="gb2312" standalone="no"?>
  2 <objectxml>
  3   <struct typeid="Human">
  4     <member name="MainPat">
  5       <struct typeid="Cat">
  6         <member name="BodyLength">
  7           <basic typeid="VInt32s" value="40"/>
  8         </member>
  9         <member name="TailLength">
 10           <basic typeid="VInt32s" value="20"/>
 11         </member>
 12         <base typeid="Mammalian">
 13           <member name="FingerCount">
 14             <basic typeid="VInt32s" value="18"/>
 15           </member>
 16           <base typeid="Animal">
 17             <member name="Age">
 18               <basic typeid="VInt32s" value="5"/>
 19             </member>
 20             <member name="Weight">
 21               <basic typeid="VInt32s" value="150"/>
 22             </member>
 23           </base>
 24         </base>
 25       </struct>
 26     </member>
 27     <member name="MainTransportation">
 28       <struct typeid="Bird">
 29         <member name="CanFly">
 30           <basic typeid="VBool" value="true"/>
 31         </member>
 32         <member name="Name">
 33           <basic typeid="VUnicodeString" value="Red Dragon"/>
 34         </member>
 35         <base typeid="Animal">
 36           <member name="Age">
 37             <basic typeid="VInt32s" value="3000"/>
 38           </member>
 39           <member name="Weight">
 40             <basic typeid="VInt32s" value="300"/>
 41           </member>
 42         </base>
 43       </struct>
 44     </member>
 45     <member name="Name">
 46       <basic typeid="VUnicodeString" value="囧Smith"/>
 47     </member>
 48     <member name="OtherPats">
 49       <list typeid="VL_AutoPtr&lt;Animal&gt;[4]">
 50         <struct typeid="Cat">
 51           <member name="BodyLength">
 52             <basic typeid="VInt32s" value="50"/>
 53           </member>
 54           <member name="TailLength">
 55             <basic typeid="VInt32s" value="30"/>
 56           </member>
 57           <base typeid="Mammalian">
 58             <member name="FingerCount">
 59               <basic typeid="VInt32s" value="18"/>
 60             </member>
 61             <base typeid="Animal">
 62               <member name="Age">
 63                 <basic typeid="VInt32s" value="10"/>
 64               </member>
 65               <member name="Weight">
 66                 <basic typeid="VInt32s" value="100"/>
 67               </member>
 68             </base>
 69           </base>
 70         </struct>
 71         <struct typeid="Fish">
 72           <member name="Length">
 73             <basic typeid="VInt32s" value="25"/>
 74           </member>
 75           <member name="MaxDepth">
 76             <basic typeid="VDouble" value="3000.0"/>
 77           </member>
 78           <base typeid="Animal">
 79             <member name="Age">
 80               <basic typeid="VInt32s" value="20"/>
 81             </member>
 82             <member name="Weight">
 83               <basic typeid="VInt32s" value="200"/>
 84             </member>
 85           </base>
 86         </struct>
 87         <struct typeid="Bird">
 88           <member name="CanFly">
 89             <basic typeid="VBool" value="true"/>
 90           </member>
 91           <member name="Name">
 92             <basic typeid="VUnicodeString" value="Jack"/>
 93           </member>
 94           <base typeid="Animal">
 95             <member name="Age">
 96               <basic typeid="VInt32s" value="30"/>
 97             </member>
 98             <member name="Weight">
 99               <basic typeid="VInt32s" value="300"/>
100             </member>
101           </base>
102         </struct>
103         <null/>
104       </list>
105     </member>
106     <member name="OtherPatsList">
107       <list typeid="VL_List&lt;VL_AutoPtr&lt;Animal&gt; , false&gt;">
108         <struct typeid="Cat">
109           <member name="BodyLength">
110             <basic typeid="VInt32s" value="50"/>
111           </member>
112           <member name="TailLength">
113             <basic typeid="VInt32s" value="30"/>
114           </member>
115           <base typeid="Mammalian">
116             <member name="FingerCount">
117               <basic typeid="VInt32s" value="18"/>
118             </member>
119             <base typeid="Animal">
120               <member name="Age">
121                 <basic typeid="VInt32s" value="10"/>
122               </member>
123               <member name="Weight">
124                 <basic typeid="VInt32s" value="100"/>
125               </member>
126             </base>
127           </base>
128         </struct>
129         <struct typeid="Fish">
130           <member name="Length">
131             <basic typeid="VInt32s" value="25"/>
132           </member>
133           <member name="MaxDepth">
134             <basic typeid="VDouble" value="3000.0"/>
135           </member>
136           <base typeid="Animal">
137             <member name="Age">
138               <basic typeid="VInt32s" value="20"/>
139             </member>
140             <member name="Weight">
141               <basic typeid="VInt32s" value="200"/>
142             </member>
143           </base>
144         </struct>
145         <struct typeid="Bird">
146           <member name="CanFly">
147             <basic typeid="VBool" value="true"/>
148           </member>
149           <member name="Name">
150             <basic typeid="VUnicodeString" value="Jack"/>
151           </member>
152           <base typeid="Animal">
153             <member name="Age">
154               <basic typeid="VInt32s" value="30"/>
155             </member>
156             <member name="Weight">
157               <basic typeid="VInt32s" value="300"/>
158             </member>
159           </base>
160         </struct>
161       </list>
162     </member>
163     <member name="OtherTranspotations">
164       <list typeid="Bird[3]">
165         <struct typeid="Bird">
166           <member name="CanFly">
167             <basic typeid="VBool" value="true"/>
168           </member>
169           <member name="Name">
170             <basic typeid="VUnicodeString" value="Blue Dragon 1"/>
171           </member>
172           <base typeid="Animal">
173             <member name="Age">
174               <basic typeid="VInt32s" value="3000"/>
175             </member>
176             <member name="Weight">
177               <basic typeid="VInt32s" value="300"/>
178             </member>
179           </base>
180         </struct>
181         <struct typeid="Bird">
182           <member name="CanFly">
183             <basic typeid="VBool" value="true"/>
184           </member>
185           <member name="Name">
186             <basic typeid="VUnicodeString" value="Blue Dragon 2"/>
187           </member>
188           <base typeid="Animal">
189             <member name="Age">
190               <basic typeid="VInt32s" value="3100"/>
191             </member>
192             <member name="Weight">
193               <basic typeid="VInt32s" value="300"/>
194             </member>
195           </base>
196         </struct>
197         <struct typeid="Bird">
198           <member name="CanFly">
199             <basic typeid="VBool" value="true"/>
200           </member>
201           <member name="Name">
202             <basic typeid="VUnicodeString" value="Blue Dragon 3"/>
203           </member>
204           <base typeid="Animal">
205             <member name="Age">
206               <basic typeid="VInt32s" value="3200"/>
207             </member>
208             <member name="Weight">
209               <basic typeid="VInt32s" value="300"/>
210             </member>
211           </base>
212         </struct>
213       </list>
214     </member>
215     <member name="OtherTranspotationsList">
216       <list typeid="VL_List&lt;Bird , false&gt;">
217         <struct typeid="Bird">
218           <member name="CanFly">
219             <basic typeid="VBool" value="true"/>
220           </member>
221           <member name="Name">
222             <basic typeid="VUnicodeString" value="Green Dragon 1"/>
223           </member>
224           <base typeid="Animal">
225             <member name="Age">
226               <basic typeid="VInt32s" value="3000"/>
227             </member>
228             <member name="Weight">
229               <basic typeid="VInt32s" value="300"/>
230             </member>
231           </base>
232         </struct>
233         <struct typeid="Bird">
234           <member name="CanFly">
235             <basic typeid="VBool" value="true"/>
236           </member>
237           <member name="Name">
238             <basic typeid="VUnicodeString" value="Green Dragon 2"/>
239           </member>
240           <base typeid="Animal">
241             <member name="Age">
242               <basic typeid="VInt32s" value="3010"/>
243             </member>
244             <member name="Weight">
245               <basic typeid="VInt32s" value="300"/>
246             </member>
247           </base>
248         </struct>
249         <struct typeid="Bird">
250           <member name="CanFly">
251             <basic typeid="VBool" value="true"/>
252           </member>
253           <member name="Name">
254             <basic typeid="VUnicodeString" value="Green Dragon 3"/>
255           </member>
256           <base typeid="Animal">
257             <member name="Age">
258               <basic typeid="VInt32s" value="3020"/>
259             </member>
260             <member name="Weight">
261               <basic typeid="VInt32s" value="300"/>
262             </member>
263           </base>
264         </struct>
265       </list>
266     </member>
267     <member name="PatMap">
268       <map typeid="VL_ListedMap&lt;VUnicodeString , VL_AutoPtr&lt;Animal&gt;&gt;">
269         <pair>
270           <key>
271             <basic typeid="VUnicodeString" value="Bird"/>
272           </key>
273           <value>
274             <struct typeid="Bird">
275               <member name="CanFly">
276                 <basic typeid="VBool" value="true"/>
277               </member>
278               <member name="Name">
279                 <basic typeid="VUnicodeString" value="Jack"/>
280               </member>
281               <base typeid="Animal">
282                 <member name="Age">
283                   <basic typeid="VInt32s" value="30"/>
284                 </member>
285                 <member name="Weight">
286                   <basic typeid="VInt32s" value="300"/>
287                 </member>
288               </base>
289             </struct>
290           </value>
291         </pair>
292         <pair>
293           <key>
294             <basic typeid="VUnicodeString" value="Cat"/>
295           </key>
296           <value>
297             <struct typeid="Cat">
298               <member name="BodyLength">
299                 <basic typeid="VInt32s" value="50"/>
300               </member>
301               <member name="TailLength">
302                 <basic typeid="VInt32s" value="30"/>
303               </member>
304               <base typeid="Mammalian">
305                 <member name="FingerCount">
306                   <basic typeid="VInt32s" value="18"/>
307                 </member>
308                 <base typeid="Animal">
309                   <member name="Age">
310                     <basic typeid="VInt32s" value="10"/>
311                   </member>
312                   <member name="Weight">
313                     <basic typeid="VInt32s" value="100"/>
314                   </member>
315                 </base>
316               </base>
317             </struct>
318           </value>
319         </pair>
320         <pair>
321           <key>
322             <basic typeid="VUnicodeString" value="Fish"/>
323           </key>
324           <value>
325             <struct typeid="Fish">
326               <member name="Length">
327                 <basic typeid="VInt32s" value="25"/>
328               </member>
329               <member name="MaxDepth">
330                 <basic typeid="VDouble" value="3000.0"/>
331               </member>
332               <base typeid="Animal">
333                 <member name="Age">
334                   <basic typeid="VInt32s" value="20"/>
335                 </member>
336                 <member name="Weight">
337                   <basic typeid="VInt32s" value="200"/>
338                 </member>
339               </base>
340             </struct>
341           </value>
342         </pair>
343       </map>
344     </member>
345     <member name="PatMultiMap">
346       <map typeid="VL_MultiMap&lt;VUnicodeString , VL_AutoPtr&lt;Animal&gt; , false&gt;">
347         <pair>
348           <key>
349             <basic typeid="VUnicodeString" value="A"/>
350           </key>
351           <value>
352             <list typeid="VL_List&lt;VL_AutoPtr&lt;Animal&gt; , false&gt;">
353               <struct typeid="Cat">
354                 <member name="BodyLength">
355                   <basic typeid="VInt32s" value="50"/>
356                 </member>
357                 <member name="TailLength">
358                   <basic typeid="VInt32s" value="30"/>
359                 </member>
360                 <base typeid="Mammalian">
361                   <member name="FingerCount">
362                     <basic typeid="VInt32s" value="18"/>
363                   </member>
364                   <base typeid="Animal">
365                     <member name="Age">
366                       <basic typeid="VInt32s" value="10"/>
367                     </member>
368                     <member name="Weight">
369                       <basic typeid="VInt32s" value="100"/>
370                     </member>
371                   </base>
372                 </base>
373               </struct>
374               <struct typeid="Fish">
375                 <member name="Length">
376                   <basic typeid="VInt32s" value="25"/>
377                 </member>
378                 <member name="MaxDepth">
379                   <basic typeid="VDouble" value="3000.0"/>
380                 </member>
381                 <base typeid="Animal">
382                   <member name="Age">
383                     <basic typeid="VInt32s" value="20"/>
384                   </member>
385                   <member name="Weight">
386                     <basic typeid="VInt32s" value="200"/>
387                   </member>
388                 </base>
389               </struct>
390             </list>
391           </value>
392         </pair>
393         <pair>
394           <key>
395             <basic typeid="VUnicodeString" value="B"/>
396           </key>
397           <value>
398             <list typeid="VL_List&lt;VL_AutoPtr&lt;Animal&gt; , false&gt;">
399               <struct typeid="Bird">
400                 <member name="CanFly">
401                   <basic typeid="VBool" value="true"/>
402                 </member>
403                 <member name="Name">
404                   <basic typeid="VUnicodeString" value="Jack"/>
405                 </member>
406                 <base typeid="Animal">
407                   <member name="Age">
408                     <basic typeid="VInt32s" value="30"/>
409                   </member>
410                   <member name="Weight">
411                     <basic typeid="VInt32s" value="300"/>
412                   </member>
413                 </base>
414               </struct>
415             </list>
416           </value>
417         </pair>
418       </map>
419     </member>
420     <base typeid="Mammalian">
421       <member name="FingerCount">
422         <basic typeid="VInt32s" value="20"/>
423       </member>
424       <base typeid="Animal">
425         <member name="Age">
426           <basic typeid="VInt32s" value="16"/>
427         </member>
428         <member name="Weight">
429           <basic typeid="VInt32s" value="2000"/>
430         </member>
431       </base>
432     </base>
433   </struct>
434 </objectxml>
posted on 2009-06-28 20:12 陳梓瀚(vczh) 閱讀(6531) 評論(10)  編輯 收藏 引用 所屬分類: C++

評論:
# re: C++基于類似反射機制的XML序列化和反序列化完成 2009-06-28 23:05 | 尹東斐
這實現(xiàn)看起來很有誘惑力 :0

有點不太懂,請指教:

136 VL_BEGIN_BASE_CLASS(Animal)
137 VL_ADD_CLASS_MEMBER(Age)
138 VL_ADD_CLASS_MEMBER(Weight)
139 VL_END_CLASS(Animal)

在VL_ADD_CLASS_MEMBER的時候,沒有涉及到成員的類型,那么當(dāng)讀取數(shù)據(jù)的時候,類型是怎么得到的?

GetConsole()->WriteLine(Converter.FindToStringConverter(Inspector)->ConvertToString(Inspector,Type.Object()));

你在這里用到了Type.Object(),我想問你是不是把所有類型都包裝起來了,相當(dāng)于每個類型都有個get_type()之類的方法,如果你是這么實現(xiàn)的,那就沒有問題了。如果不是的話,

197 VL_ObjectInspector::Ptr Inspector=Manager->GetInspector(L"VL_ObjectType");

188 VL_ObjectInspector::Ptr Inspector=Manager->GetInspector(VL_InspectorSelector<Animal>::GetID());

我想這兩句的作用應(yīng)該是一樣的,只不過VL_InspectorSelector<Animal>是在宏里面特化的,L"VL_ObjectType"是你為所有“內(nèi)建”類型寫的。

難道Inspector里面包含有每個成員的類型?
  回復(fù)  更多評論
  
# re: C++基于類似反射機制的XML序列化和反序列化完成 2009-06-28 23:47 | 陳梓瀚(vczh)
@尹東斐
1:Type是智能指針,Type.Object用于獲得那個真實的指針,你看錯了。
2:VL_ADD_CLASS_MEMBER(Weight)可以得到Weight的類型,這個用模板就可以了。
3:Inspector里面包含了每一個直接或間接注冊的類型的所有信息,完全可以只適用Inspector來修改對象里面的內(nèi)容。這一點是XML Serializer讀寫的基礎(chǔ)。  回復(fù)  更多評論
  
# re: C++基于類似反射機制的XML序列化和反序列化完成 2009-06-28 23:54 | 陳梓瀚(vczh)
@尹東斐
等我連通過反射調(diào)用函數(shù)的東西做完之后,會有一個Demo的。暫定為服務(wù)器使用http協(xié)議將一個C++類掛起來,然后有一個客戶端去調(diào)用它。就跟現(xiàn)在的web service差不多,當(dāng)然我并不使用那個協(xié)議。  回復(fù)  更多評論
  
# re: C++基于類似反射機制的XML序列化和反序列化完成 2009-06-29 00:43 | 尹東斐
@陳梓瀚(vczh)

>>VL_ADD_CLASS_MEMBER(Weight)可以得到Weight的類型,這個用模板就可以了。

這個用模板也做不到吧? 除非有typeof之類的操作符,否則拿不到類型的呀。  回復(fù)  更多評論
  
# re: C++基于類似反射機制的XML序列化和反序列化完成 2009-06-29 00:48 | 尹東斐
比如:
class A
{
public:
int i;
};

VL_BEGIN_INSPECTOR_DECLARATION
VL_BEGIN_BASE_CLASS(A)
VL_ADD_CLASS_MEMBER(i)
VL_END_CLASS(A)
VL_END_INSPECTOR_DECLARATION

A a;

現(xiàn)在我要通過類似 int x = func(a, "i"); 來的到a中i的值,那這個時候,怎么知道i的類型呢?也就是說func的返回值是從哪里來的?

不吝賜教~  回復(fù)  更多評論
  
# re: C++基于類似反射機制的XML序列化和反序列化完成 2009-06-29 05:06 | 陳梓瀚(vczh)
@尹東斐
有一種東西叫模板函數(shù),函數(shù)里面不就拿得到類型了么。這個時候送進模板類去搞特化。  回復(fù)  更多評論
  
# re: C++基于類似反射機制的XML序列化和反序列化完成 2009-06-29 05:08 | 陳梓瀚(vczh)
@尹東斐
而且Inspector返回的是指針,然后有各種各樣的辦法來告訴你這個東西是個int,讓你用合適的方法去拿。  回復(fù)  更多評論
  
# re: C++基于類似反射機制的XML序列化和反序列化完成 2009-06-29 19:21 | yindf
@陳梓瀚(vczh)

謝謝  回復(fù)  更多評論
  
# re: C++基于類似反射機制的XML序列化和反序列化完成 2009-06-29 23:34 | 陳昱(CY)
是不是VL_BEGIN_BASE_CLASS的話,VL_ADD_CLASS_MEMBER里面的內(nèi)容類型一定要C++的基本類型?這樣對所有基本類型都進行特化?  回復(fù)  更多評論
  
# re: C++基于類似反射機制的XML序列化和反序列化完成 2009-06-30 08:08 | 陳梓瀚(vczh)
@陳昱(CY)
背后預(yù)定義了很多已經(jīng)存在的基本類型和很多容器等等。你也可以用相同的辦法擴展成支持STL的。  回復(fù)  更多評論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美国产先锋| 国产区精品在线观看| 欧美国产日韩在线| 正在播放亚洲| 中国女人久久久| 日韩天堂在线观看| 99国产精品久久久久久久久久 | 亚洲午夜小视频| 亚洲日本成人女熟在线观看| 国产综合第一页| 国产精品一区在线观看| 国产精品久久久久久久久搜平片 | 亚洲人成在线播放| 麻豆精品一区二区av白丝在线| 久久岛国电影| 欧美韩国日本综合| 一区二区三区高清在线| 亚洲一区二区三区四区五区黄| 亚洲免费在线视频| 欧美一区二区网站| 欧美午夜电影在线观看| 国内自拍亚洲| 亚洲欧美日韩在线| 欧美激情视频给我| 欧美一区永久视频免费观看| 久久躁狠狠躁夜夜爽| 国产精品高精视频免费| 在线播放精品| 狼人社综合社区| 亚洲午夜久久久久久久久电影院| 久久精品噜噜噜成人av农村| 欧美性一二三区| 日韩视频在线免费| 欧美成人免费全部| 久久精品国产清自在天天线| 欧美劲爆第一页| 亚洲欧洲日韩综合二区| 久久在线免费| 久久久久国内| 欧美一区国产在线| 国产精品一区一区三区| 亚洲欧美文学| 西西人体一区二区| 今天的高清视频免费播放成人| 欧美影视一区| 欧美在线观看天堂一区二区三区| 欧美午夜精品一区| 欧美在线视频免费观看| 欧美在线亚洲一区| 日韩视频免费观看高清完整版| 亚洲日本久久| 国产亚洲人成网站在线观看| 欧美自拍偷拍| 欧美一区在线直播| 国产欧美日韩一区二区三区在线观看| 黄色一区三区| 亚洲欧美国产不卡| 亚洲激情视频网站| 午夜一区二区三区在线观看 | 99国内精品久久| 国产在线一区二区三区四区 | 久久亚洲图片| 欧美剧在线观看| 亚洲欧美一区二区精品久久久| 欧美日韩福利视频| 国产精品尤物| 欧美日韩情趣电影| 国产精品乱码一区二三区小蝌蚪| 国内成+人亚洲+欧美+综合在线| 亚洲国产一区二区三区青草影视| 亚洲视频观看| 亚洲人成7777| 欧美一区二区精美| 日韩手机在线导航| 欧美激情视频在线播放| 国产亚洲欧美一区二区三区| 欧美一区观看| 亚洲国产精品久久人人爱蜜臀| 亚洲深夜福利网站| 免费黄网站欧美| av成人黄色| 国模私拍一区二区三区| 欧美中在线观看| 久久国产精品久久久| 日韩一级黄色片| 国产精品视频不卡| 狂野欧美激情性xxxx欧美| 欧美另类极品videosbest最新版本| 日韩视频免费大全中文字幕| 久久久亚洲成人| 久久高清一区| 亚洲盗摄视频| 国产精品久久久久77777| 亚洲免费人成在线视频观看| 蜜臀久久99精品久久久久久9| 国产日韩一区二区三区在线播放 | 免费h精品视频在线播放| 精品成人久久| 亚洲巨乳在线| 亚洲欧洲在线播放| 欧美激情综合五月色丁香| 亚洲级视频在线观看免费1级| 亚洲国产精品福利| 国产亚洲欧美一区| 欧美日韩一区二区三区高清| 久久精品一本| 欧美日韩国产高清视频| 欧美fxxxxxx另类| 亚洲一区二区三区国产| 国外成人在线视频| 欧美午夜视频在线观看| 嫩草国产精品入口| 欧美专区18| 亚洲午夜一区二区三区| 欧美另类一区| 日韩亚洲欧美一区| 欧美 日韩 国产在线 | 亚洲第一成人在线| 久久麻豆一区二区| 裸体丰满少妇做受久久99精品| 久久久久网址| 亚洲欧美怡红院| 亚洲精品一级| 亚洲欧美另类在线观看| 亚洲精品免费在线| 亚洲国产成人av| 99re这里只有精品6| 久久国产乱子精品免费女| 在线视频欧美日韩| 一区二区三区免费网站| 91久久在线| 亚洲伦理久久| 久久综合久久久久88| 亚洲第一二三四五区| 另类av导航| 久久综合久久久| 亚洲欧洲一区二区三区在线观看| 亚洲激情国产| 欧美一二三视频| 欧美激情一区二区在线| 国产揄拍国内精品对白| 国产午夜久久| aa成人免费视频| 亚洲电影在线免费观看| 亚洲色诱最新| 欧美高清不卡在线| 狠狠入ady亚洲精品| 欧美性事免费在线观看| 国产综合激情| 国产精品在线看| 国产精品乱码| 一区二区三区中文在线观看| 亚洲高清一区二| 午夜一区二区三区在线观看| 久久国内精品视频| 久久久久久午夜| 欧美国产视频在线观看| 日韩一区二区精品| 欧美伊久线香蕉线新在线| 欧美经典一区二区| 在线观看国产精品网站| 久久精品中文| 农村妇女精品| 夜夜精品视频一区二区| 鲁大师影院一区二区三区| 国产精品区一区二区三| 这里只有精品丝袜| 亚洲综合精品| 国产精品扒开腿做爽爽爽视频| 国产九色精品成人porny| 1000部精品久久久久久久久| 亚洲女女女同性video| 亚洲视频你懂的| 在线欧美不卡| 欧美国内亚洲| 欧美片在线观看| 亚洲综合成人婷婷小说| 亚洲视频久久| 国产伦精品一区二区三区高清版| 久久婷婷亚洲| 国产日韩欧美在线一区| 小黄鸭精品aⅴ导航网站入口| 欧美激情1区2区3区| 欧美一区二区三区久久精品| 亚洲国产另类精品专区| 亚洲第一在线综合在线| 欧美成人按摩| 黑丝一区二区| 91久久久久久国产精品| 欧美日韩岛国| 久久在线免费观看视频| 国产精品久久久久一区二区三区 | 欧美私人啪啪vps| 亚洲欧洲日韩在线| 国产精品激情| 欧美**字幕| 国产午夜精品美女视频明星a级| 欧美aaa级| 伊人男人综合视频网| 欧美成人中文|