2010-11-25 14 views
0

Ich versuche, eine Klasse für die Serialisierung (XML für jetzt) ​​zu implementieren. Die Idee ist, dass jede abgeleitete Klasse ihre Mitglieder mit der Basisklasse registrieren kann und die Basis die Mitglieder in Form von XML schreiben kann.So speichern Sie Typinformationen des Vorlagenvektors

Der Code sieht so etwas wie dieses

class IXMLINF 
{ 

protected: 

struct INFObj 
{ 
union MemPtr 
{ 
    int* piMem; 
    char* pstrMem; 
    IXMLINF* pINFMem; 
} 

MemPtr memObj; 
}; 

vec<INFObj*> m_INFObjVec; 
void addMemToINF(int* piMem) 
{ 
INFObj* pObj = new INFObj; 
pObj->memObj.piMem = piMem; 
m_INFObjVec.append(pObj); 
} 
void addMemToINF(char* pstrMem); 
void addMemToINF(IXMLINF* pINFMem); 

void writeToXML() 
{ 
for_each_element_in_m_INFObjVec 
{ 
//if int or char process to XML 
//else if IXMINF call its writeToXML 
} 
} 
} 

So weit so gut. Ich möchte aber auch Vektoren von Typen in XML schreiben können. Für int und char * es ist einfach, aber wie es für Vektoren von IXMLINF abgeleiteten Klasse in allgemeiner Weise zu tun (VEC ist eine andere Art von VEC)

Eine Möglichkeit

<class T>void addMemToINF(vec<T*>* pXMem) 
{ 

//T is a class derived from IXMLINF 
void* pvMem = (void*)pXMem 
//Somehow store type of T 

Type = T 

} 

void writeToXML() 
{ 
.... 

vec<Type*>* pVec = (vec<Type*>*)pvMem ; 

} 

sein könnte ich Ich freue mich über alle Vorschläge, wie Type Information gespeichert werden kann (Type = T step) oder irgendeine alternative Methode, um das zu tun, was ich tun möchte.

Antwort

0

FWIW diese answer (von @Phillip) zu einer verwandten Frage beantwortet auch diese Frage mit ein wenig Feinschliff. Wenn irgendjemand will kann ich die lösung setzen.