2010-11-25 55 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。