2010-11-25 57 views
0

我想實現一個序列化的類(現在是XML)。這個想法是任何派生類都可以用基類註冊它的成員,並且基類可以用XML的形式寫成員。如何保存模板向量的類型信息

的代碼看起來是這樣的

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

到目前爲止好。不過,我也希望能夠將類型向量寫入XML。對於int和字符*很容易,但如何做到這一點的IXMLINF派生類的載體在一個通用的方法(VEC是VEC不同類型)

一種可能的方式可能是

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

} 

我會感謝有關如何存儲Type信息(類型= T步)或任何替代方法來做我想做的事情的任何建議。

回答

0

FWIW這answer(by @Phillip)到一個相關的問題也回答這個問題的一點點調整。如果有人願意,我可以把soln。