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

隨筆-341  評論-2670  文章-0  trackbacks-0
    跟上一篇文章一樣,一樣的數據結構,但是添加了對數組、列表和映射的更多的支持。首先是代碼,然后是序列化后的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 }

    于是這里是序列化的結果:
  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 | 尹東斐
這實現看起來很有誘惑力 :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的時候,沒有涉及到成員的類型,那么當讀取數據的時候,類型是怎么得到的?

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

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

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

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

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

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

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

這個用模板也做不到吧? 除非有typeof之類的操作符,否則拿不到類型的呀。  回復  更多評論
  
# 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;

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

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

謝謝  回復  更多評論
  
# re: C++基于類似反射機制的XML序列化和反序列化完成 2009-06-29 23:34 | 陳昱(CY)
是不是VL_BEGIN_BASE_CLASS的話,VL_ADD_CLASS_MEMBER里面的內容類型一定要C++的基本類型?這樣對所有基本類型都進行特化?  回復  更多評論
  
# re: C++基于類似反射機制的XML序列化和反序列化完成 2009-06-30 08:08 | 陳梓瀚(vczh)
@陳昱(CY)
背后預定義了很多已經存在的基本類型和很多容器等等。你也可以用相同的辦法擴展成支持STL的。  回復  更多評論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            久久久精品2019中文字幕神马| 久久久噜噜噜久噜久久 | 国产日韩一区二区三区在线| 性久久久久久久久| 亚洲欧美久久久| 亚洲综合视频网| 午夜久久资源| 欧美在线观看日本一区| 性欧美1819sex性高清| 午夜精品久久久久久久白皮肤| 亚洲影院色在线观看免费| 亚洲视频免费观看| 亚洲欧美另类在线观看| 欧美一区二区三区在线看 | 亚洲国产日韩综合一区| 在线成人av| 亚洲精品一区二区三区婷婷月 | 欧美在线观看视频| 午夜免费久久久久| 久久久夜夜夜| 欧美日韩国产一级| 欧美三级网址| 国模精品娜娜一二三区| 亚洲国产婷婷香蕉久久久久久99| 亚洲欧洲视频在线| 亚洲天堂成人在线观看| 久久精品亚洲乱码伦伦中文| 欧美成人亚洲成人日韩成人| 日韩一区二区精品| 久久av二区| 卡一卡二国产精品| av成人激情| 久久久噜噜噜久久中文字免| 欧美区日韩区| 国产一区二区三区黄| 99国产精品久久久久久久成人热 | 亚洲深夜影院| 久久久久久久性| 欧美午夜精品理论片a级按摩| 国产午夜精品麻豆| 一区二区三区久久网| 欧美激情一区二区久久久| 亚洲男女自偷自拍图片另类| 六月丁香综合| 国产日本欧洲亚洲| 中国日韩欧美久久久久久久久| 久久久一二三| 亚洲一区二区三区视频| 欧美国产精品v| 国产亚洲精品成人av久久ww| 一本一道久久综合狠狠老精东影业 | 久久国产主播| 最新日韩av| 久久久久在线观看| 欧美深夜福利| 亚洲品质自拍| 久久精品亚洲一区二区三区浴池| 日韩一级片网址| 欧美日韩播放| av成人免费观看| 亚洲国产免费| 久久精品亚洲国产奇米99| 国产精品欧美日韩久久| 亚洲一区二区免费视频| 欧美国产日韩一二三区| 欧美在线三级| 国产欧美日韩三级| 亚洲视频在线观看一区| 久久成人一区| 欧美激情视频给我| 久久精品九九| 欧美日本三级| 亚洲一区二区三区精品视频| 欧美中在线观看| 欧美高清在线视频| 99成人免费视频| 性色av一区二区三区在线观看| 久久久久久噜噜噜久久久精品| 亚洲国产一区二区a毛片| 欧美午夜在线一二页| 久久伊伊香蕉| 欧美国产一区二区| 小黄鸭视频精品导航| 欧美jjzz| 亚洲欧美日韩国产成人| 欧美顶级大胆免费视频| 国产资源精品在线观看| 国产亚洲精品aa| 欧美成人精品一区二区| 亚洲一区视频在线观看视频| 欧美国产日韩xxxxx| 国产视频在线观看一区二区三区| av不卡免费看| 日韩视频一区二区三区在线播放免费观看| 亚洲制服av| 玖玖精品视频| 欧美在线国产| 欧美二区在线观看| 影音先锋日韩资源| 久久久久久网址| 欧美一区二区视频网站| 国产精品视频一二三| 中国日韩欧美久久久久久久久| 欧美成人嫩草网站| 亚洲精品中文字幕在线| 国产深夜精品| 久久激五月天综合精品| 亚洲欧美美女| 国产欧美日韩不卡| 久久九九国产精品| 久久久久久一区二区三区| 国内精品亚洲| 久久久精品国产一区二区三区| 亚洲欧美在线另类| 国产精品日日摸夜夜添夜夜av| 国产精品久久久久一区二区三区共| 99热在线精品观看| 一本久久综合亚洲鲁鲁| 欧美三级视频在线| 亚洲欧美日韩在线不卡| 亚洲欧美精品中文字幕在线| 欧美sm视频| 久久资源av| 欧美激情视频在线播放| 亚洲五月六月| 亚洲欧美怡红院| 在线观看的日韩av| 欧美国产日韩一区二区| 美腿丝袜亚洲色图| 国产喷白浆一区二区三区| 亚洲美女精品成人在线视频| 国产精品白丝黑袜喷水久久久| 亚洲欧美国内爽妇网| 欧美在线免费视屏| 亚洲经典在线| 亚洲一区二区三区久久| 国产亚洲免费的视频看| 欧美激情精品久久久久久变态| 欧美高清视频www夜色资源网| 一区二区三区|亚洲午夜| 亚洲男人第一网站| 亚洲电影视频在线| 免费成人毛片| 欧美电影免费网站| 亚洲欧美日韩精品久久| 亚洲国产另类精品专区| 亚洲人成艺术| 亚洲永久免费| 亚洲免费电影在线| 欧美综合第一页| 亚洲视频图片小说| 久久精品1区| 宅男噜噜噜66一区二区 | 欧美sm视频| 欧美日韩一区免费| 9国产精品视频| 欧美视频一区二区在线观看| 久久久久一区二区| 国产精品久久久对白| 亚洲福利免费| 国产一区二三区| 中文精品99久久国产香蕉| 亚洲日本理论电影| 亚洲久久一区| 欧美一区二区三区四区高清| 欧美日韩亚洲系列| 亚洲国产91色在线| 影视先锋久久| 久久久人成影片一区二区三区观看| 在线视频欧美日韩| 在线一区二区三区四区| 亚洲国产清纯| 亚洲美女视频在线观看| 亚洲欧美综合| 国产精品久久久久久久久久直播| 亚洲国产精品一区二区第四页av | 欧美大成色www永久网站婷| 国产日韩亚洲欧美| 亚洲免费在线观看| 欧美一区二区精品久久911| 欧美香蕉大胸在线视频观看| 亚洲日本欧美在线| 亚洲裸体俱乐部裸体舞表演av| 久久亚洲精选| 欧美成人在线免费观看| 欧美日韩一区二区三区视频| 久久天天躁狠狠躁夜夜爽蜜月| 国产精品婷婷午夜在线观看| 亚洲色图综合久久| 久久久999| 黄色成人精品网站| 久久亚洲国产成人| 91久久久久久国产精品| 狂野欧美一区| 亚洲精选中文字幕| 欧美成人国产va精品日本一级| 亚洲第一中文字幕| 一本不卡影院| 国产日韩亚洲| 久久免费黄色|