2010-11-25 49 views
0

J'essaie d'implémenter une classe pour la sérialisation (XML pour l'instant). L'idée est que n'importe quelle classe dérivée peut enregistrer ses membres avec la classe de base et la base peut écrire les membres sous forme de XML.Comment enregistrer les informations de type du vecteur modèle

Le code ressemble à ceci

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 
} 
} 
} 

Jusqu'à présent, si bon. Cependant je veux aussi pouvoir écrire des vecteurs de types en XML. Pour int et char * il est facile, mais comment faire pour les vecteurs de IXMLINF classe dérivée d'une manière générique (VEC est un type différent de VEC)

Une façon possible peut-être

<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 ; 

} 

Je vais Appréciez toutes les suggestions sur la façon de stocker Type informatio (Type = T étape) ou toute autre méthode pour faire ce que je veux faire.

Répondre

0

FWIW ce answer (par @Phillip) à une question connexe répond également à cette question avec un peu de peaufinage. Si quelqu'un veut je peux mettre le soln.